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