package main
var fooRunning = false
var barRunning = false
func foo() {
fooRunning = true
defer func() { fooRunning = false }()
if barRunning {
// wait for bar() to finish
}
...
}
func bar() {
barRunning = true
defer func() { barRunning = false }()
if fooRunning {
// wait for foo() to finish
}
...
}
在我的情況下,如果我們運行go foo()
它應該等待bar()
完成,反之亦然。什麼是最好的方式來做到這一點?請注意,它們也可以獨立執行。如何等待多個goroutine完成?
相關/可能重複[這個golang代碼有什麼問題?](https://stackoverflow.com/questions/28958192/whats-wrong-with-this-golang-code?noredirect=1&lq=1) – icza
那些要求導致了大量的必須妥善處理的競爭條件(如果其他例程在檢查後立即終止,該怎麼辦?如果有人在否定檢查後立即啓動另一例程,該怎麼辦等等。如果某人運行2個例程foo ())我強烈地敦促你創建一個更好的設計,如果你沒有2個互相依賴另一個獨立運行狀態的例程。 – nos
@nos提到的問題中的代碼具有設計的死鎖。沒有解決方案可以用於給定的場景。 – Adrian