プロセス間でデータを共有するために、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: Most Useless for Multi-Threaded Programming .