gpt4 book ai didi

c++ - 多线程函数重启模式/解决方案

转载 作者:行者123 更新时间:2023-11-28 03:13:52 26 4
gpt4 key购买 nike

我有以下场景:

一个线程正在类 X 的方法 A 中迭代列表数据结构。该数据结构是一个缓存。在任何时候,我们都可以调用 X 类中的方法 B,说我们的缓存已过时。在那种情况下,如果我们当前在函数 A 中,我们需要重新启动函数 A,因为对该数据结构的迭代可以让我们找到不再存在的数据。我们可以指望方法 B 不会同时被调用两次(方法 A 将有时间完成)。

这可能吗?我正在使用 C++。请注意,仅锁定缓存是不够的。如果我们锁定缓存并接到一个电话说缓存已过期,我们需要立即重启函数 A 以实现正确的行为。

这不会正常工作,但我会尝试展示我需要的东西:

Class X
{
Method A
{
for each //data structure
{
// do processing

// check if our cache is out of date
if(mRestart)
{
while(!mReadyToStart)
; //wait

mRestart = false;
mReadyToStart = false;

//Break, and call something that will recall this function.
}
else
return result; //return means we never needed to restart.
}
}

Method B
{
mRestart = true;

//Do processing

mReadyToRestart = true;
}

bool mRestart; // Init to false in constructor
}

最佳答案

您需要使用同步机制来保护 mRestartmReadyToRestart 成员和您正在处理的数据结构免受并发访问。

根据您的特定需求、操作系统和构建环境,您可以使用 c++11 标准互斥锁或条件变量,或其他低级操作系统方法或框架(例如 boost::thread)在 c++ 中实现这一点。

关于c++ - 多线程函数重启模式/解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576920/

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