c++原子对象锁自由保证

c++ atomic object lock free guarantee

本文关键字:自由 对象 c++      更新时间:2023-10-16

关于这个问题我有一个后续问题为什么is_lock_free是一个成员函数?

总结一下问题中的观点:无锁的属性只能为一个类型的实例所知,而不是为一个类型的任何实例所知。

我想知道如果一个实例是无锁在运行时的某个点,是保证属性(由c++11标准或更高)在执行的其余部分是真的吗?

谢谢

《标准》并没有用这么多话来保证这一点,但我想说这显然是隐含的:

  • 如果实例不打算保持无锁状态,那么在从is_lock_free获取结果和使用结果之间会有一个竞争条件:如果这是一个有效的关注,我希望在标准中明确提到的那种事情

  • 29.4/2 "功能atomic_is_lock_free( 29.6 )表示对象是否无锁。在任何给定的程序执行中,对于相同类型的所有指针,无锁查询的结果应该是一致的。 this 提示实例是否无锁,在程序执行期间不太可能改变。

如果您确定(偏执?)要保证实例的无锁状态在程序运行期间不会发生变化,您可以简单地在指向实例的指针上调用atomic_is_lock_free