В основном, вы используете Lock
, логический флаг и переменную условия для реализации эквивалента Lock
. Вы правы, считая, что это полностью излишне. Я думаю, что ваш профессор просто дает вам упражнение, чтобы показать правильный способ ожидания состояния и правильный способ сообщить о нем. Могло бы быть немного более креативным, если бы придумал причину ожидания и причину для сигнала, но что угодно. Важным является шаблон , воплощенный в этих функциях acquire()
и release()
.
Обратите внимание, что это , а не пример того, как на самом деле реализуются блокировки уровень операционной системы, потому что отсутствует понятие wait set . То есть набор потоков, ожидающих получения какой-либо данной блокировки, набор потоков, ожидающих, чтобы быть пробужденным вызовом condition.signal()
, набор потоков, ожидающих запуска ЦП, и т. Д. c.