【发布时间】:2013-12-11 15:56:53
【问题描述】:
我正在尝试开发以下无锁代码(c++11):
int val_max;
std::array<std::atomic<int>, 255> vector;
if (vector[i] > val_max) {
val_max =vector[i];
}
问题是当线程很多时(128个线程),结果不正确,因为例如val_max=1,三个线程(vector[i] = 5, 15 and 20)会执行下一行的代码,这将是一场数据竞赛..
所以,我不知道用 c++11 中的可用函数(我不能使用互斥锁、锁)来保护整个代码的问题的最佳解决方法。
有什么建议吗?提前致谢!
【问题讨论】:
-
描述你想要达到的目标。
-
也许这会解决你的问题stackoverflow.com/questions/16190078/…
-
更大的问题是,即使您摆脱了数据竞争,
val_max上的争用也会成为瓶颈,并扼杀您可能从多线程解决方案中获得的所有性能提升。你的算法似乎有缺陷,但由于你没有写出你想要实现的东西,所以很难帮助你修复它。