我使用 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)
)使用原子操作吗?
供将来参考:易失性:多线程编程几乎没用。