Hol*_*ham 3 c++ multithreading
我有一个对象Foo,它有一个全局变量Time currentTime
Foo有两种方法可以从不同的线程调用.
update()
{
currentTime = currentTime + timeDelay;
}
restart(Time newTime)
{
currentTime = newTime;
}
Run Code Online (Sandbox Code Playgroud)
我看到重启时的行为,时间正确改变以及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;
}
};
Run Code Online (Sandbox Code Playgroud)