C++线程问题

标签 c++ multithreading

我有一个对象 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/

相关文章:

c++ - 访问本地 linux 线程栈 (pthreads)

c++ - std::chrono::duration::max() 不适用于线程支持库

c# - 如何设置服务 .Net Remoting 调用的线程的单元状态?

Linux 线程和进程 - CPU 亲和性

c++ - Qt5 静态链接在 Ubuntu Linux 上失败

c++ - 如何使用 Luabind 绑定(bind)重载函数?

c++ - 为什么 Win32 api _beginthreadex/CreateThread 在使用 CRT 时会泄漏?

c++ - 对于我的用例来说,有比最小堆更快的东西吗?

c++ - 具有关系的对象类型 - C++

php - 在 PHP 中运行 C++ 脚本