2009-06-24 5 views
7

Можете ли вы отменить Boost Thread так же, как и pthread?Boost Thread Отмена

Я пишу простой сторожевой таймер для прекращения рабочих потоков, если они сбой, и, похоже, нет способа просто отменить поток в библиотеке Boost Thread.

ответ

10

Они не поддерживают отмену, что хорошо, поскольку это может вызвать всевозможные тонкие проблемы.

Посмотрите на раздел документов, которые охватывают прерывание потока и исключение boost_interrupted boost :: thread, и способ, который позволяет вам выполнить то, что вы хотите, а также очищать вещи.

+0

Похоже, что прерывание прерывания потока не поможет вам, если поток застревает в цикле, что является одной из вещей, которые я пытаюсь защитить. Пока я отказываюсь от переносимости, я начинаю думать, что мне лучше всего использовать обработчик очистки pthread. –

+3

Или положите точку прерывания где-нибудь в цикле (-ах). Это не должно сильно повлиять на производительность, особенно если поток уже давно работает. И остальная инфраструктура прерывания уже существует. – Duck

2

Они не поддерживают отмены из коробки (как указал Duck), однако в зависимости от обработки происходит внутри вашего рабочего потока (ов), я бы рассмотреть вопрос об использовании boost::condition уведомить нить что он должен закончить (чисто) при первой же возможности.