как я могу временно приостановить другие потоки, используя boost::thread?

#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 вы можете использовать переменную условия (возможно, более распространенную идиому для вашей проблемы) или даже барьер.