This tutorial说如下:
every load on x86/64 already implies acquire semantics and every store implies release semantics.
现在假设我有以下代码(我在评论中写下了我的问题):
/* Global Variables */
int flag = 0;
int number1;
int number2;
//------------------------------------
/* Thread A */
number1 = 12345;
number2 = 678910;
flag = 1; /* This is a "store", so can I not use a release barrier here? */
//------------------------------------
/* Thread B */
while (flag == 0) {} /* This is a "load", so can I not use an acquire barrier here? */
printf("%d", number1);
printf("%d", number2);
最佳答案
本教程在汇编/机器级别讨论加载和存储,您可以在其中依赖 x86 ISA 语义,其中包括加载时获取和释放-店内。
然而,您的代码是 C
,它根本不提供此类保证,并且编译器可以自由地将其转换为与您在加载和存储方面所期望的完全不同的东西。这不是理论上的,而是在实践中发生的。所以简短的回答是:不,不可能在 C 中合法地移植 - 尽管如果幸运的话它可能会起作用。
关于在这种情况下我可以不使用发布和获取障碍吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473452/