为什么_XBEGIN_STARTED等于-1?

时间:2014-10-12 02:30:13

标签: c transactions

#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。

1 个答案:

答案 0 :(得分:1)

如果它从未被宣布/定义为某种东西,那么认为它将为零是错误的。在这种情况下, 会发生什么,你的编译器会痛苦地抱怨它不知道关于 _XBEGIN_STARTED

它可以肯定地说它被定义为该值。


-1的定义位于rtmintrin.h,而immintrin.h文件则包含{{3}}。所有这些都与事务性内存有关。

_XBEGIN_STARTED标题文件中,您可以看到rtm明确定义为_XBEGIN_STARTED的位反转,如果您将其打印为带符号的数字(在两个&#中) 39;补充环境),给你0

-1