Конд-л oop очищение - PullRequest
       81

Конд-л oop очищение

0 голосов
/ 20 апреля 2020

Согласно https://golang.org/pkg/sync/#Cond .Wait , необходимо обернуть вызов Wait () в for-l oop, так как при возобновлении в первый раз c .L предположительно не заблокирован Это противоречит приведенному выше предложению «..., Wait блокирует c .L перед возвратом.».

При выполнении этого кода не возникает никаких ошибок во время выполнения, даже если Wait () немедленно возобновляет выполнение без for-l oop, а Unlock () должна выдавать ошибку времени выполнения при разблокировке без предварительной блокировки.

Правильно ли считать, что для l oop нет необходимости при использовании Cond в Go, так как нет никаких ложных пробуждений при использовании Cond?

1 Ответ

0 голосов
/ 20 апреля 2020

Для l oop необходимо, потому что когда возвращается Wait, нет гарантии, что условие все еще выполняется. Вызов Wait активируется, когда происходит вызов Broadcast или Signal. Когда Wait просыпается, он блокирует блокировку, но нет гарантии, что условие изменится до того, как произойдет блокировка. Разблокировка и приостановка - атомы c на входе, но пробуждение и блокировка не на выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...