Ich verwende eine MMAP-Datei, um Daten zwischen Prozessen zu teilen.IPC über mmap-Datei: sollten Atomics und/oder volatile verwendet werden?
Der Code ist wie folgt:
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++;
Die Fragen sind:
- Soll ich flüchtigen Qualifier verwenden (
volatile int Data
)? - Sollte ich atomare Operationen auf die geteilten Daten verwenden (
__sync_fetch_and_add(&(shared->Data), 1)
)?
Für die Zukunft: Volatile: Almost Useless for Multi-Threaded Programming.
Threads haben nichts mit Prozessen zu tun (IPC steht für interprocess communication). –
@VJo: Huh? Ein Prozess ist mindestens ein Thread. Pflege um zu erarbeiten? –
Ja, es ist mindestens ein Thread, aber welche atomaren Operationen müssen mit Prozessen? In einem Fall von MMAP-Daten benötigen Sie nichts Spezielles, um darauf zuzugreifen. –