2014-10-12 114 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)