I have code that is something like this:
var lock sync.Mutex
func DoSomething() {
lock.Lock()
go func() {
defer lock.Unlock()
// Code here
}()
}
func Wait() {
lock.Lock()
lock.Unlock()
}
我需要<代码>Wait(,因为有时是因为 在<条码>上,我必须打上<条码>条码>。 Exit 。 因此,在这种情况下,我需要完成。
只要I m只打上DoSomething(
)”一度,它就会被罚款,但当然,如果它两次叫,则第二次等到去。
DoSomething() // returns immediately
DoSomething() // waits until the first one finishes to return
如果我把锁定在 go路里,那么Wait(
)就在 go路开始之前就被召去。
func DoSomething() {
go func() {
lock.Lock()
defer lock.Unlock()
// Code here
}()
}
DoSomething()
Wait() // this finishes before the goroutine even starts
我在<代码>sync中尝试了其他几个事情,但发现有些事情行之有效。
我甚至试图从<代码>DoSomething中抽出航道,将其称作 DoSomething(
),但我无法这样做。