C++11 对原子变量有一个“比较和交换”操作。
语义是:
原子地比较 所指向的值
obj
与 所指向的值expected
,如果相等,则将前者替换为desired
(执行读-修改-写操作)。否则,将指向的实际值加载到obj
into*expected
(执行加载操作)。
我想做同样的事情,但不是*obj
在值相等时设置,而是在一个大于另一个时设置它(假设我们谈论的是有序类型)。
这是否以某种方式支持?也许可以通过一些黑客来实现?
注意: CAS 循环不适合我,因为我比较的两个值可能会在非原子操作之间发生变化。