私はプロセス間でデータを共有するためにmmap'edファイルを使用します。mmap'edファイルによるIPC:アトミックおよび/またはvolatileを使用する必要がありますか?
コードは次のようである:
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。
スレッドはプロセスとは関係ありません(IPCはプロセス間通信を表します)。 –
@VJo:ハァッか。プロセスは少なくとも1つのスレッドです。詳しく教える? –
はい、それは少なくとも1つのスレッドですが、どのようなアトミック操作がプロセスと関係していますか? mmapされたデータの場合、アクセスするために特別なものは必要ありません。 –