gpt4 book ai didi

c++ - 在 haswell RTM 中使用的 isLocked 方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:31 27 4
gpt4 key购买 nike

我目前正在使用 Intel Haswell RTM(事务内存的硬件支持)开发应用程序。据我所知herehere ,建议的过程是使用某种回退锁,以防事务中止。

推荐流程如下:

someTypeOfLock fallback_lock;
if(_xbegin == _XBEGIN_STARTED) {
if(fallback_lock.isLocked()) // put the lock into the transaction read_set
_xabort();
// do stuff
_xend();
}
else{
fallback_lock.acquire();
// do stuff
fallback_lock.release();
}

我的问题是关于 isLocked() 函数。直到现在我还没有找到任何提供此功能的主流库/类(如 here 所示,大部分时间都是无用的)。你有什么建议吗?

谢谢!

最佳答案

Andi Kleen 在此处建议 using pthread_mutex_trylock(有一些保留)。
还有一些幻灯片提到将其用于 lock_is_locked() here .第一个链接声称,由于特殊的硬件改编,trylock 将在 RTM 中成功,我不完全确定这种机制将如何工作,所以我不确定我是否可以推荐它。

相反,我认为我个人会选择一种更直接的方法来使用任何共享变量,方法是将其设置在后备锁保护原子部分内,并读取它而不是 try_lock。像这样的 -

someTypeOfLock fallback_lock;
if(_xbegin == _XBEGIN_STARTED) {
if(shared_var) // put the lock into the transaction read_set
_xabort();
// do stuff
_xend();
}
else{
fallback_lock.acquire();
shared_var = true;
// do stuff
shared_var = false;
fallback_lock.release();
}

共享变量作为一个穷人锁,当然写入和读取它本身不 protected ,但由于它驻留在临界区内,它会提供你想要的确切语义(只在 RTM 尝试中读取原子部分,写在后备原子部分内)。

当然 - 如果您可以以非侵入式方式直接查询锁本身会更简单,但这取决于锁库。

关于c++ - 在 haswell RTM 中使用的 isLocked 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20825802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com