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

Posted

技术标签:

【中文标题】我可以将 std::atomic<int64> 放在共享内存中并期望原子操作吗?【英文标题】:Can I place a std::atomic<int64> in shared memory and expect atomic operation? 【发布时间】:2014-08-01 09:27:42 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

视情况而定。

如果您使用的架构支持 64 位类型的原子操作,我希望它能够工作。如果std::atomic 是用互斥锁模拟原子操作,那么你就会遇到问题:

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

【讨论】:

以上是关于我可以将 std::atomic<int64> 放在共享内存中并期望原子操作吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中等待 std::atomic<int> 的正确方法?

C++ error: use of deleted function ‘std::atomic<short unsigned int>::atomic(const std::atomic<short

C++ 原子操作 std::atomic<int>

std::atomic_int 出现“使用已删除函数”错误

std::atomic<int>:x.fetch_add(1) 和 x++ 之间的区别;

使用 std::atomic<int> 索引对大型数组进行异步并行化操作有多安全