我使用mmap文件在进程之间共享数据。

代码是这样的:

struct Shared
{
int Data;
};

int file = open("file.dat", O_RDWR);
Shared* shared = static_cast<Shared*>(
    mmap(0, sizeof(Shared), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, file, 0));
shared->Data++;

问题是:
  • 我应该使用 Volatile 限定词(volatile int Data)吗?
  • 是否应该对共享数据(__sync_fetch_and_add(&(shared->Data), 1))使用原子操作?


  • 供将来引用:Volatile: Almost Useless for Multi-Threaded Programming

    最佳答案

    从多个线程更改整数时,请勿使用volatile。挥发性既不是必需的,也不是充分的。原子操作将起作用。

    关于c++ - 通过mmap'ed文件进行IPC:是否应使用原子和/或 volatile ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4668592/

    10-12 17:16