制定者和线程

时间:2010-12-27 21:42:39

标签: c++ multithreading poco-libraries

我在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

工作正常。我只是不知道问题是什么,以及如何在将来避免它。

谢谢,

1 个答案:

答案 0 :(得分:0)

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