假设我有一个变量 x。
x = 0
然后我生成一些线程,它们中的每一个都可能会或可能不会在不使用原子的情况下运行以下表达式。
x |= 1
在所有线程都加入我的主线程之后,主线程在值上分支。
if(x) { ... } else { ... }
在这种情况下是否可能存在竞争条件?我的想法说不,因为在读取和写入“x”之间一个线程是否被另一个线程中断似乎并不重要(在这两种情况下,要么是'x == 1',要么是'x == 1' )。也就是说,我想确保我没有遗漏一些明显的愚蠢或可笑的微妙的东西。
另外,如果您碰巧提供了相反的答案,请提供一个逐个说明的示例!
上下文: 我试图在 OpenCL 中让我的线程指示他们的任何工作项中是否存在某个功能。如果任何线程表明存在该功能,我的主机应该能够根据结果进行分支。我正在考虑使用上述方法。如果你们有更好的建议,那也行!
详细信息: 我正在尝试将提前退出添加到我的 OpenCL 基数排序实现中,以跳过基数传递,如果数据是带状的(即上面的 'x' 将是 x[RADIX] 并且我将拥有所有工作组,对在部分减少数据后,通过“x”指示 RADIX 箱中是否存在元素)。