сеттеры и темы - PullRequest
       14

сеттеры и темы

2 голосов
/ 28 декабря 2010

У меня проблема с потоками в 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

Это отлично работает. Я просто понятия не имею, в чем заключалась проблема и как ее избежать в будущем.

Спасибо

1 Ответ

0 голосов
/ 27 мая 2011

Вы упомянули, что вы определили член shutdown_ volatile. Возможно, вы скрывали унаследованную базовую переменную?

...