我有一个对象 Foo,它有一个全局变量,Time currentTime
Foo 有两个从不同线程调用的方法。
update()
{
currentTime = currentTime + timeDelay;
}
restart(Time newTime)
{
currentTime = newTime;
}
我看到重新启动时的行为,时间正确更改,而其他时间 currentTime 似乎没有重置(或者它确实重置但随后更新以某种方式将其设置回来。
方法更新大约每秒调用一次,而重启仅在用户启动重启事件(按下按钮)时发生。我认为这是线程计时问题,欢迎对正在发生的事情提出任何建议或意见。
最佳答案
这里肯定存在竞争条件。最直接的解决方案是通过使用锁来保护共享变量 currentTime
的使用。我在这里使用 Boost.Threads 互斥锁类:
class Foo
{
boost::mutex _access;
update()
{
boost::mutex::scoped_lock lock(_access);
currentTime = currentTime + timeDelay;
}
restart(Time newTime)
{
boost::mutex::scoped_lock lock(_access);
currentTime = newTime;
}
};
关于C++线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896182/