使用std :: atomic,您可以进行原子增量,进行compare-exchange等等。如果比较交换成功和不成功,则可以选择为内存排序提供一个值,也可以提供两个值,一个为成功,一个为不成功的比较和交换。有了这个你可以加快释放仅在操作成功后才需要释放行为的互斥体。
但是我想知道的是:哪种CPU架构通过ISA支持这样的区别?
答案 0 :(得分:1)
通过此操作,您可以加快释放仅需要的互斥量 如果操作成功,将释放行为。
互斥锁释放失败如何?
释放未锁定的互斥锁是编程错误。
纯释放操作几乎从来不会在有条件的情况下完成,而获取操作则是在有条件的情况下进行。引用计数可能是一个例外。
但是我想知道的是:哪种CPU架构支持 通过ISA来区分?
所有您将无条件地在比较并设置之后插入围栏指令的地方。
再次引用计数(这可能是互斥量实现之外的RMW操作的最常见用法):
基本上RC就像是RW锁:
在这种情况下,您将R解锁(因此释放),并且如果W锁处于挂起状态,并且没有其他R锁处于活动状态的W锁(重新)。 (是的,我知道这样的类比是没有意义的,因为您不会在进行R解锁的同一线程中进行W锁定,而是进行其他操作。)
在这种情况下,您需要W锁的后挡板。
因此,通常,任何在负载上不隐式获取的弱排序CPU。
这对于诸如RC和RW锁之类的原语很重要,您可以在其中尝试将最后一个R锁转换为W锁(尝试升级锁)。