我使用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 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/