#include <stdio.h>
#include <immintrin.h>
int main(int argc, char **argv) {
int x = 0;
while(true) {
if(_xbegin() != _XBEGIN_STARTED) {
printf("Transaction failed, retrying\n");
continue;
}
x++;
printf("Transaction done\n");
_xend();
break;
}
return 0;
}
所以我在这里没有声明_XBEGIN_STARTED,当我试图打印它的值时,它似乎是-1而不是0。
答案 0 :(得分:1)
如果它从未被宣布/定义为某种东西,那么认为它将为零是错误的。在这种情况下, 会发生什么,你的编译器会痛苦地抱怨它不知道关于 _XBEGIN_STARTED
。
它可以肯定地说它被定义为该值。
-1
的定义位于rtmintrin.h
,而immintrin.h
文件则包含{{3}}。所有这些都与事务性内存有关。
在_XBEGIN_STARTED
标题文件中,您可以看到rtm
明确定义为_XBEGIN_STARTED
的位反转,如果您将其打印为带符号的数字(在两个&#中) 39;补充环境),给你0
:
-1