Tag: java memory model

此示例是否包含数据竞争?

这是原始问题,但我的问题有些不同。 C ++内存模型 – 此示例是否包含数据竞争? 我的问题: //CODE-1: initially, x == 0 and y == 0 if (x) y++; // pthread 1 if (y) x++; // pthread 2 注意:上面的代码是用C语言编写的,而不是用C ++编写的(没有内存模型)。 那么它是否包含数据竞争? 从我的观点来看:如果我们在顺序一致性内存模型中查看代码,则没有数据竞争,因为x和y将永远不会同时为非零。 但是,我们永远不能假设顺序一致性内存模型,因此编译器重新排序可以进行相对于线程内正确性的转换,因为编译器不知道线程的存在…….对吗? 所以代码可以转换为: //CODE-2 y++; if (!x) y–; x++; if (!y) x–; 上面的转换并没有违反顺序正确性所以它是正确的。这不是编译器的错,对吧? 所以我同意CODE-1包含数据竞争的观点。你呢? 我有一个额外的问题,带有内存模型的C ++ 11可以解决这个数据竞争因为编译器知道线程,所以他们会根据内存模型类型进行重新排序,对吧?