2

我对 C++ 中的线程有疑问。

我有 2 个线程正在运行:一个运行客户端,一个用作侦听器。侦听器线程调用一个shutdown()方法,该方法仅执行以下操作:

shutdown_=true;
std::cout<<shutdown_<<std::endl;

shutdown_设置为 volatile,并且监听线程是唯一调用该方法的线程,并且仅在其他线程处于模式 ( )shutdown()时才访问。wait()Poco synchronizedObject wait()

出于某种原因,cout一直打印“0”,最初(在使用 xcode 时)我收到一条警告,说该行shutdown_=true没有做任何事情。几次编译后,此警告消失了。

我尝试使用互斥锁,在行前后锁定和解锁,没有效果。我最终shutDown()完全删除了该函数,而不是使用它,而是改为shutDown_公开的,并直接从侦听器线程访问它,如下所示:

client_->shutdown_=true

这很好用。我只是不知道问题是什么,以及将来如何避免它。

谢谢,

4

1 回答 1

0

您提到您定义了 shutdown_ 成员 volatile。您是否隐藏了继承的基本变量?

于 2011-05-27T14:19:07.337 回答