gpt4 book ai didi

C++线程问题

转载 作者:太空狗 更新时间:2023-10-29 19:55:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com