【发布时间】:2011-06-07 19:17:07
【问题描述】:
我使用 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。
【问题讨论】:
标签: c++ ipc atomic volatile mmap