Junior — Middle
How can you organize and manage thread execution sequences?
sobes.tech AI
Answer from AI
In Go, several core mechanisms are used to organize and manage the sequence of goroutine execution:
-
Channels — allow synchronization of goroutines by passing data between them. A goroutine reading from a channel will wait until another goroutine sends data, ensuring order.
-
sync.WaitGroup — used to wait for a group of goroutines to finish. It allows waiting until all launched goroutines complete.
-
Mutex and other primitives from the sync package — for protecting shared resources and preventing race conditions.
Example of using channels for sequential execution:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Worker %d started\n", id)
// simulate work
done <- true // signal completion
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // wait for worker 1 to finish
go worker(2, done)
<-done // wait for worker 2 to finish
fmt.Println("All workers done")
}
Thus, by using channels and synchronization, you can control the order of goroutine execution.