C++11提供了一种针对原子变量的“比较和交换”(compare and exchange)操作。
其语义为:
原子地将
obj
指向的值与expected
指向的值进行比较,如果它们相等,则用desired
替换前者(执行读取-修改-写入操作)。否则,将obj
指向的实际值加载到*expected
中(执行加载操作)。
我想做同样的事情,但是不是在它们相等时设置*obj
,而是在一个大于另一个时设置(假设我们正在讨论有序类型)。
这是否有支持?或者可以通过某些hack方式实现吗?
注意:对我来说,CAS循环并不能解决问题,因为我要比较的两个值可能会在非原子操作之间发生改变。