Boost线程问题
Boost thread questions
我正在尝试做以下事情
class a{
public:
void Start();
void Tick();
bool IsTimeOut;
};
void a::Start()
{
boost::thread thread1(boost::bind(&a::Tick,this));
}
void a::Tick()
{
while(!IsTimeOut)
{
boost::this_thread::sleep(boost::posix_time::millisec(1000));
}
}
我的环境是vs2005和win7。
但是,我在调试中总是遇到访问冲突
在这种情况下,访问冲突将表明线程正在运行超过a
对象的生命周期。
IsTimeOut
需要是原子的,或者如果它是由另一个线程写的,则需要由互斥锁保护,否则程序可能无法正常工作,但这不应该导致访问冲突。
您正在立即销毁boost::thread
对象,从而分离线程,因此您没有办法等待它完成。我建议将线程对象存储为a
的成员变量,或者在a
的析构函数中与它连接,或者提供一个显式的wait()
成员函数与线程连接。
如果从多个线程访问,
IsTimeOut
应该是volatile
,即
volatile bool IsTimeOut;
看看这篇DDJ的文章。
如果您展示更多的代码,并解释IsTimeOut
是如何更改的,则可能更容易说明哪里出了问题。一般来说,看起来您有多个线程,第一个线程创建a
,但是该线程然后做什么?a
是否会脱离范围而被摧毁?如果是这样,那么计时器线程肯定会有访问冲突,因为对象不再可用。
相关文章:
- 使用 ubuntu 终端在 c++ 上运行线程类的问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 餐饮哲学家问题 - 只有 2 个线程工作
- 线程过程中的线程同步问题
- 在 C++ 的 Qt 中使用 WINAPI 线程时出现问题
- 线程和互斥锁的使用有什么问题
- 并发问题:如何只有一个线程通过关键部分
- MFC执行线程问题
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- C++多线程生产者-消费者问题
- C++ 多线程中的锁和条件变量问题
- 线程清理器检测到数据争用,问题出在哪里?
- 编译问题 C++ 同时,尝试通过调用另一个对象中的成员函数来创建 std:: 线程
- 多线程与线程小问题
- 线程池 C++ 实现问题
- 提升线程问题,当一个线程与另一个线程没有相同的副本时如何共享变量?
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 多线程概念问题
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]