我使用 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)
)?
备查:易失性:对于多线程编程几乎无用 http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/.
从多个线程更改整数时,不应使用 volatile。挥发性既不是必要的,也不是充分的。原子操作就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)