gpt4 book ai didi

c++ - 在多线程单写入器多读取器代码中安全使用 int

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:08 24 4
gpt4 key购买 nike

我正在编写具有单个编写器和多个读取器的并行代码。作者会从头到尾填入一个数组,读者会依次访问数组的元素。伪代码如下所示:

std::vector<Stuff> vec(knownSize);
int producerIndex = 0;
std::atomic<int> consumerIndex = 0;

生产者线程:

for(a while){
vec[producerIndex] = someStuff();
++producerIndex;
}

消费者线程:

while(!finished){
int myIndex = consumerIndex++;
while(myIndex >= producerIndex){ spin(); }
use(vec[myIndex]);
}

我需要围绕 producerIndex 进行任何类型的同步吗?似乎可能发生的最糟糕的事情是我会在更新旧值时读取它,所以我可能会花费额外的时间。我错过了什么吗?我可以确定对 myIndex 的每个分配都是唯一的吗?

最佳答案

正如评论所指出的,这段代码存在数据竞争。不要猜测代码是否有机会做你想做的事,只需修复它:更改 producerIndex 的类型和 consumerIndex来自 intstd::atomic<int>并让编译器实现者和标准库实现者担心如何使其在您的目标平台上正常工作。

关于c++ - 在多线程单写入器多读取器代码中安全使用 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939032/

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