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),你的意思是我必须将状态设置为“重试”或“显式”?在我的理解中,是的。