У меня проблема с потоками в C ++.
У меня работает 2 потока: один работает с клиентом, а другой работает как слушатель. Поток слушателя вызывает метод shutdown()
, который выполняет только следующее:
shutdown_=true;
std::cout<<shutdown_<<std::endl;
shutdown_
устанавливается как энергозависимый, и поток слушателя является единственным, который вызывает метод shutdown()
, и доступ к нему осуществляется только тогда, когда другой поток находится в режиме wait()
(Poco synchronizedObject wait()
).
По какой-то причине cout
продолжает печатать "0", и первоначально (при использовании xcode) я получил предупреждение о том, что строка shutdown_=true
ничего не делает. Это предупреждение исчезло после нескольких компиляций.
Я пытался использовать блокировку Mutex, блокировку и разблокировку до и после линии, но безрезультатно.
В итоге я полностью удалил функцию shutDown()
и вместо ее использования изменил shutDown_
на общедоступный и получил к ней доступ непосредственно из потока слушателя следующим образом:
client_->shutdown_=true
Это отлично работает. Я просто понятия не имею, в чем заключалась проблема и как ее избежать в будущем.
Спасибо