C++ HTM中的xabort(状态)是如何工作的?
我在代码中使用了C++ HTM中的xabort(状态)是如何工作的?,c++,gcc,intrinsics,transactional-memory,intel-tsx,C++,Gcc,Intrinsics,Transactional Memory,Intel Tsx,我在代码中使用了\u xabort(status)函数,以释放缓存中的缓冲区。我检查事务是否成功,如果事务成功,我使用\u xend(),否则我使用\u xabort(status)。在这种情况下,我可以使用\u xabort(状态) unsigned status = 0; while(true) { status = _xbegin(); if(status == _XBEGIN_STARTED) { //Transaction code
\u xabort(status)
函数,以释放缓存中的缓冲区。我检查事务是否成功,如果事务成功,我使用\u xend()
,否则我使用\u xabort(status)
。在这种情况下,我可以使用\u xabort(状态)
unsigned status = 0;
while(true)
{
status = _xbegin();
if(status == _XBEGIN_STARTED)
{
//Transaction code
bool success = transaction_func();
if(success)
{
_xend();
break;
}
else
{
_xabort(0Xff);
continue;
}
}
}
我可以这样使用\u xabort(status)
吗?这是单线程情况,我自己检查事务\u func()
,然后调用\u xabort(status)
。
我认为这是一个关于\u xabort(status)
使用的问题,我不知道它是否可以保留在(status==u XBEGIN\u start)
区域。在我看来,如果状态等于\u XBEGIN\u STARTED
,它将不会中止事务,因此此代码不正确
如果
transaction\u func()
返回false,printf
此代码中的status
,为什么状态值为'0xff000001'?您可能需要区分是要重试当前事务(\u XABORT\u重试)还是完全中止它(\u XABORT\u显式)。嗨,谢谢,如果我不区分,您的意思是\u XABORT(status)
不知道如何中止事务,所以什么都不会做?我不确定如果不设置_xabort的状态,规格不清楚,或者我没有找到一个解释这种情况的状态会发生什么。嗨,谢谢,实际上我将状态设置为0xff(-1),你的意思是我必须将状态设置为“重试”或“显式”?在我的理解中,是的。