Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 我可以放置std::atomic<;int64>;在共享内存中并期望原子操作?_C++_C++11_Ipc_Shared Memory_Atomic - Fatal编程技术网

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

C++ 我可以放置std::atomic<;int64>;在共享内存中并期望原子操作?,c++,c++11,ipc,shared-memory,atomic,C++,C++11,Ipc,Shared Memory,Atomic,是std::atomic在共享内存中运行良好,还是未定义?将无锁基本类型添加到共享内存似乎是一种简单的方法,但是我可以相信,在共享内存的上下文中不可能保证原子行为。为什么不呢,您只需要在共享内存区域内正确地分配和构造它。这取决于具体情况 如果您使用的体系结构支持64位类型上的原子操作,我希望它能够工作。如果std::atomic正在使用互斥体模拟原子操作,则您将遇到问题: 共享内存通常用于进程之间的通信,而使用的互斥锁可能只在单个进程中的线程之间工作(例如Windows CriticalSec

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

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

这取决于具体情况

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

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