История изменений
Исправление shkolnick-kun, (текущая версия) :
У тебя неправильное понимание того, как работает синхронизация потоков с условными переменными.
Во-первых, как уже сказали, нельзя делать броадкаст при разлоченном мьютексе в resume.
Во-вторых, из-за того, что ты делаешь lock и unlock в sleep у тебя возникает гонка с потерей события resume.
В-третьих, «взводит некую переменную-флаг» и «сбрасывает флаг» должно происходить строго при залоченном мьютексе.
В-четвертых, все что сделал дальше - лютый костыле_велосипед_с_квадратными_колесами.
Исходная версия shkolnick-kun, :
У тебя неправильное понимание того, как работает синхронизация потоков с условными переменными.
Во-первых, как уже сказали, нельза делать броадкаст при разлоченном мьютексе в resume.
Во-вторых, из-за того, что ты делаешь lock и unlock в sleep у тебя возникает гонка с потерей события resume.
В-третьих, «взводит некую переменную-флаг» и «сбрасывает флаг» должно происходить строго при залоченном мьютексе.
В-четвертых, все что сделал дальше - лютый костыле_велосипед_с_квадратными_колесами.