gpt4 book ai didi

c++ - parallel_do_feeder 线程安全吗?

转载 作者:行者123 更新时间:2023-11-28 08:07:49 24 4
gpt4 key购买 nike

以下代码存在并发问题。这里 inDegVec 是一个全局的 int *getGUID()getTime() 是 POD 变量的无害访问器.

void operator () ( GNode& src,
tbb::parallel_do_feeder<GNode>& feed_it )
const
{

std::list<GNode> addNodes;

// some thread-safe code that populates addNodes

while (!addNodes.empty()) {
feed_it.add(addNodes.front());
addNodes.pop_front();
}

if (inDegVec[srcAVI->getUID()] == 0) {
// srcAVI is still the minimum among its neighbors
if (srcAVI->getTime() < colTime) {
//lwl.push (src);
//tbb::mutex::scoped_lock lock(histMutex);
assert(addNodes.empty());
feed_it.add(src);
}
}


};

如果我将 while/if block 包装在互斥锁中,代码就可以工作。但为什么这是必要的? parallel_do_feeder::add() 不是线程安全的吗?我看到的示例代码(例如 http://llpanorama.wordpress.com/2008/03/09/parallel_do-parallel-done/)没有使用同步,这表明它是......而且我在 TBB 手册中没有看到关于 parallel_do_feeder 线程安全的讨论。

最佳答案

是的,parallel_do_feeder 是线程安全的。

GNode 的拷贝构造函数线程安全吗?传递给 parallel_do_feeder::add()GNode 实例被复制到将处理它的任务中(可能在另一个线程中)。

关于c++ - parallel_do_feeder 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882689/

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