C++线程问题

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似乎没有重置的其他时间(或者它确实重置但是然后更新以某种方式将其设置回来.

方法更新大致每隔一秒左右调用一次,而重新启动仅在用户启动重启事件(按下按钮)时发生.我认为这是线程时间问题,欢迎任何有关正在发生的事情的建议或意见.

180*_*ION 9

你肯定有竞争条件.最直接的解决方案是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)