2014-10-12 74 views
0
#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为什么_XBEGIN_STARTED等于-1?

回答

1

,这是错误的认为它将是零。在这种情况下会发生,这是因为你的编译器会很痛苦地抱怨它什么都不知道关于_XBEGIN_STARTED

,它是抱怨,这意味着定义它,如果你得到-1当你打印出来的东西,它是一个安全的赌注,说这是被定义为价值。


_XBEGIN_STARTED定义在rtmintrin.h这,反过来,包括你的immintrin.h文件。所有这些都与事务性内存有关。

rtm头文件,你可以看到_XBEGIN_STARTED明确定义为0位反转,这将,如果你把它打印出来作为一个符号数(以二进制补环境),给你-1

#define XBEGIN_STARTED (~0u)