Какой правильный способ пометить поток для выхода с использованием boost без C ++ 11 - PullRequest
1 голос
/ 08 февраля 2012

После прочтения различных ответов о том, как volatile не следует использовать для обозначения работающего потока для выхода (и предложения по использованию boost:atomic<>), я все еще не могу найти ответ, как правильно сделать это с помощью boost без C ++. 11.

  1. Должен ли я использовать boost::mutex?
  2. Если это так, нужно ли мне блокировать переменную m_stopThread, где я изменяю ее на true и в цикле выполнения, где я проверяю ее?
  3. Будет ли boost::mutex блокировка вызова совершать вызов в операционную систему, или это легче, если использовать инструкции по защите памяти и т. Д .?

1 Ответ

0 голосов
/ 08 февраля 2012

Я полагаю, что необходимо только вызвать что-либо, чтобы выдать барьер записи по материнской линии после установки, и прочитать барьер памяти перед тестированием. Это может быть атомарная операция, мьютекс-доступ или что-то еще. (Полагаю, что даже ввод разных мьютексов будет нормальным :) Если вы не спешите, вы можете ничего не делать, потому что правильная инструкция о барьере должна быть выдана когда-нибудь в будущем (по крайней мере, когда произойдет аппаратное прерывание). Конечно, m_stopThread должен быть объявлен как volatile

(хотя я могу ошибаться с точки зрения Стадарда)

...