2 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
如評論中所述,使用 goroutines 可能不是您要實現(xiàn)的目標(biāo)的最佳用例 - 因此這可能是一個XY 問題。
話雖如此,如果你想確保兩個獨立的 goroutines 以交替順序交錯它們的工作,你可以實現(xiàn)一組“乒乓”互斥鎖:
var ping, pong sync.Mutex
pong.Lock() // ensure the 2nd goroutine waits & the 1st goes first
go func() {
for {
ping.Lock()
foo()
pong.Unlock()
}
}()
go func() {
for {
pong.Lock()
bar()
ping.Unlock()
}
}()
https://go.dev/play/p/VO2LoMJ8fek

TA貢獻(xiàn)1772條經(jīng)驗 獲得超8個贊
使用頻道:
func printFoo(i int, ch chan<- bool, wg *sync.WaitGroup) {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Print("foo")
ch <- true
}()
}
func printBar(i int, ch chan<- bool, wg *sync.WaitGroup) {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Print("bar")
ch <- true
}()
}
func main() {
times := 4
firstchan := make(chan bool)
secondchan := make(chan bool)
var wg sync.WaitGroup
for i := 0; i <= times; i++ {
printFoo(i, firstchan, &wg)
<-firstchan
printBar(i, secondchan, &wg)
<-secondchan
}
wg.Wait()
}
https://go.dev/play/p/MlZ9dHkUXGb
- 2 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報