我在C ++中遇到线程问题。
我有两个运行的线程:一个运行客户端,一个运行作为监听器。侦听器线程调用shutdown()
方法,该方法仅执行以下操作:
shutdown_=true;
std::cout<<shutdown_<<std::endl;
shutdown_
设置为volatile,侦听器线程是唯一调用shutdown()
方法的线程,只有在另一个线程处于wait()
模式时才会访问它(Poco synchronizedObject wait()
{1}})。
由于某种原因,cout
保持打印“0”,并且最初(使用xcode时)我收到警告,说明shutdown_=true
行没有做任何事情。几次编译后,这个警告就消失了。
我尝试使用Mutex锁,在线前后锁定和解锁,无效。
我最终完全删除了函数shutDown()
,而不是使用它,我将shutDown_
更改为公共,并直接从侦听器线程访问它,如下所示:
client_->shutdown_=true
工作正常。我只是不知道问题是什么,以及如何在将来避免它。
谢谢,
答案 0 :(得分:0)
您提到您定义了shutdown_ member volatile。您是否隐藏了继承的基本变量?