应该使用什么 C++ 构造来访问与另一个进程共享的内存

Gre*_*ory 5 c++ language-lawyer c++14 c++17

C++ 代码应该如何访问与另一个应用程序共享的内存,例如通过memmapd 文件?选项似乎是:

  1. 常规原始访问,例如int* p = ...address of shared memory...; *p = 5; *p. 这似乎是不安全的,因为允许编译器假设 的内容p是稳定的,但事实并非如此。
  2. 考虑这些操作的一种方法是它们是另一个进程的输入/输出,因此(至少在旧版本的 C++ 中)应该实现的方式似乎是使用volatile.
  3. 由于现代 C++ 包含内置的原子操作,另一种选择是使用原子。在实践中,编译器似乎并没有对这些操作做太多优化,但不清楚是否被标准禁止。

从实验来看,似乎 2 和 3 都在实践中工作(2 没有正确处理弱记忆的复杂性),但是否符合标准?我是否需要使用组合,即访问atomic<volatile int>

归档时间:

查看次数:

93 次

最近记录:

4 年,5 月 前