Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 互斥保护块中的同步模式_C++_C++11_Atomic_Memory Fences - Fatal编程技术网

C++ 互斥保护块中的同步模式

C++ 互斥保护块中的同步模式,c++,c++11,atomic,memory-fences,C++,C++11,Atomic,Memory Fences,在上述boost示例的“具有双重检查锁定模式的Singleton”示例中,第二次加载实例的内存消耗和存储实例的内存释放是否必要?我认为作用域锁已经具有获取和释放语义,并且第一次加载的实例具有同步模式内存消耗。假设此处使用的boost原语支持与其std对应项相同的功能,第二次加载不需要内存_顺序_消耗,因为它是有保证的 要根据互斥体的获取/释放语义与存储/释放同步,您是对的 也许,使用内存_顺序_消耗是基于错误的假设,即加载/释放可能会在互斥体/获取屏障上浮动, 但这是不可能的,因为互斥锁保证,因


在上述boost示例的“具有双重检查锁定模式的Singleton”示例中,第二次加载实例的内存消耗和存储实例的内存释放是否必要?我认为作用域锁已经具有获取和释放语义,并且第一次加载的实例具有同步模式内存消耗。

假设此处使用的
boost
原语支持与其
std
对应项相同的功能,第二次
加载
不需要
内存_顺序_消耗
,因为它是有保证的 要根据互斥体的获取/释放语义与
存储/释放
同步,您是对的

也许,使用
内存_顺序_消耗
是基于错误的假设,即
加载/释放
可能会在
互斥体/获取
屏障上浮动, 但这是不可能的,因为
互斥锁
保证,因此
内存_顺序_松弛
非常好

另一方面,
存储/释放
是绝对必要的,因为它与第一个
加载/使用
同步,而第一个
加载/使用
不受
互斥锁的保护