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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      视情况而定。

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

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

      【讨论】:

        猜你喜欢
        • 2022-09-24
        • 2021-07-26
        • 2011-08-10
        • 2021-06-18
        • 2011-07-18
        • 2022-08-11
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        相关资源
        最近更新 更多