我对 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
这很好用。我只是不知道问题是什么,以及将来如何避免它。
谢谢,