Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
package main
import "fmt"
import "sync"
func main() {
var wg, mu, n = sync.WaitGroup{}, sync.Mutex{}, 0
wg.Go(func() { mu.Lock(); n++; mu.Unlock() })
wg.Go(func() { mu.Lock(); n++; mu.Unlock() })
wg.Wait()
fmt.Println(n)
}2
- Ждать
1:mu.Lockпускает кn++только одну горутину за раз, поэтому вторая видит1и ни одно увеличение не теряется. - Ждать deadlock: второй
Lockлишь ждёт, пока первая горутина вызоветUnlock, а затем продолжает работу.
- Что могла бы напечатать программа без
mu.Lockиmu.Unlock? - Почему
wg.Wait()должен стоять доfmt.Println(n)?