我正在尝试使用 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”进行编译。