3

我正在尝试使用 rtm 交易。我开始使用内在函数来实现一个简单的事务。但我发现以下行总是返回zero,而要成功开始事务,它应该是-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");
    }
}


代码的输出是“000111”,我不明白为什么第一个交易失败但第二个交易没有。
此外,如果我在第一个事务中更改 printf 输入,则第二个事务根本不会启动,并且以下修改代码的输出将为"0000"

#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 并使用“gcc -mrtm”进行编译。

4

0 回答 0