为什么这些rtm交易很奇怪?

时间:2017-12-07 00:57:44

标签: c x86 intrinsics tsx rtm

我正在尝试使用rtm交易。我开始使用内在函数来实现一个简单的事务。但我发现以下行总是返回,而为了成功开始事务,它应该是 -1
int status = _xbegin();
然后,我尝试将 if..else 放入循环中以获取此代码:

#include<stdlib.h>
#include<immintrin.h>
#include<stdio.h>

void main()
{
    int status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        printf("111");
        _xend();
    } else {
        printf("000");
    }
    status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        printf("111");
        _xend();
    } else {
        printf("000");
    }
}


代码的输出是&#34; 000111&#34; ,我无法理解为什么第一次交易失败但第二次交易失败。
此外,如果我在第一笔交易中对printf输入进行了更改,则第二笔交易根本不会开始,以下修改后的代码的输出将为&#34; 0000&#34;

#include<stdlib.h>
#include<immintrin.h>
#include<stdio.h>

void main()
{
    int status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        printf("111");
        _xend();
    } else {
        printf("0");
    }
    status = _xbegin();
    if (status == _XBEGIN_STARTED) {
        printf("111");
        _xend();
    } else {
        printf("000");
    }
}

如果我也删除了其中一条printf行,也会发生同样的情况。

我想了解为什么输出是这样的以及如何解决问题? 请注意,我使用immintrin.h并使用&#34; gcc -mrtm&#34;进行编译。

0 个答案:

没有答案
相关问题