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