我可以在共享内存中放置std :: atomic <int64>并期望进行原子操作吗?</int64>

时间:2014-08-01 09:27:43

标签: c++ c++11 ipc shared-memory atomic

std :: atomic在共享内存中运行良好,还是未定义?这似乎是一种将无锁基本类型添加到共享内存的简单方法,但我可以相信,在共享内存的上下文中不可能保证原子行为。

2 个答案:

答案 0 :(得分:1)

为什么不,您只需要在共享内存区域内正确分配和构建它。

答案 1 :(得分:1)

取决于。

如果您使用的体系结构支持64位类型的原子操作,我希望它能够正常工作。如果std::atomic正在使用互斥锁模拟原子操作,那么您将遇到问题:

  • 共享内存通常用于进程之间的通信 - 所使用的互斥锁只能在单个进程中的线程之间工作(例如Windows CriticalSection API)。
  • 或者,共享内存很可能映射到不同进程中的不同地址,并且互斥锁可能有内部指针,这意味着它不起作用。