#c #multithreading #boost #boost-thread
#c #многопоточность #boost #boost-thread
Вопрос:
У меня есть программа с 2 потоками (A и B). Возможно ли определить блок кода в потоке B, который после ввода приостанавливает поток A до завершения выполнения блока?
Я использую C и библиотеку boost::thread 1.44
РЕДАКТИРОВАТЬ: Проблема, с которой я столкнулся, которая помешала мне просто использовать мьютекс, заключалась в том, что у меня не было доступа к коду в потоке A, поскольку это не потокобезопасная библиотека, поэтому я не мог контролировать, когда он обращается к моему общему ресурсу. Я внес некоторые архитектурные изменения в свой код, и теперь ресурс больше не является общим, и проблема решена.
Комментарии:
1. Что, если поток A содержит блокировку, которая требуется потоку B?
2. @Mike daniels, хорошая мысль! Я переархивировал свой код, чтобы иметь возможность использовать мьютекс
Ответ №1:
Это называется блокировкой, и в boost вы хотели бы использовать scoped_lock
Проверьте эту страницу: scoped_lock
Ответ №2:
Помимо scoped_lock/mutex
решения Grammin вы можете использовать переменную условия (возможно, более распространенную идиому для вашей проблемы) или даже барьер.