У меня проблема с тупиком в моем коде, связанная с использованием переменных условия. Это скорее вопрос дизайна, чем вопрос с чистым кодом. У меня нет проблем с написанием кода, как только я понимаю правильный дизайн. У меня есть следующий сценарий:Условие deadlock
- Резьба A ждет переменную условия.
- Thread B вызывает notify_all, и поток A просыпается.
Это, конечно, то, что я хочу, и что происходит, когда все работает так, как ожидалось. Но иногда вместо этого получается следующий сценарий:
- Резьба A выполняет код прямо перед тем, как он начнет ждать переменной условия.
- Thread B вызывает notify_all, думая, что поток A ждет.
- Нить А начинает ждать переменную условия, не понимая, что поток B уже сказал ей прекратить ждать. Тупик.
Каков наилучший способ решить эту проблему? Я не могу придумать надежный способ проверить, действительно ли поток A ожидает ожидания, чтобы узнать, когда я должен позвонить notify_all в поток B. Нужно ли мне прибегать к timed_lock? Я ненавижу.
В какой библиотеке вы используете? Какая ОС? –
Используйте семафор. –