Сонная нить из другого

Учитывая два std:: threads A и B, есть ли способ, которым A может приостановить B, без какого-либо специального кода в B для этой цели?

Обоснование: в настоящее время B - очень сложный алгоритм, который должен чисто выходить, когда A (поток мониторинга) сообщает об этом, периодически проверяя некоторый общий флаг. Проблема в том, что для целей отладки я хотел бы точно знать, в каком состоянии B - момент, когда A запрашивает такой выход (например, чтобы увидеть, где мы забыли проверить общий флаг), поэтому я хотел бы приостановить B (для отладки) с а.

Заранее благодарим! Broes

Ответ 1

Это зависит от системы. У Windows есть функция SuspendThread, но я признаю, что я мало знаю об этом. В Unix вы должны иметь возможность посылать сигнал в поток с помощью pthread_kill (который, несмотря на свое имя, не убивает поток, а просто посылает сигнал) и улавливает его в целевом потоке, где обработчик сигнала может вызвать sleep.