Forum: PC-Programmierung Memory Mapped Files und Mutex/Update


von Peter (Gast)


Lesenswert?

Hallo,

ich nutze für den Datenaustausch zwischen 2 Prozessen ein MMF. Das ganze 
erfolgt in C#.

Ein Prozeß schreibt ausschließlich, der ander ließt nur. Dehalb 
verzichte ich auch auf ein Mutex. Kann man das so machen?

Wann wird der veränderte Teil aus dem schreibenden Prozeß im lesenden 
eingeblendet? Kann man das forcieren? Wie kann ich sicherstellen, daß im 
lesenden Prozeß auch die Daten schon aktualisiert wurden?

Momentan mache ich das so, dass Prozeß A ins MMF schreibt, danach wird 
die Anzahl geschriebener Bytes per Nachricht (WM_MESSAGE) an Prozeß B 
gesendet. Prozeß B weiss jetzt, daß er weitere Daten lesen kann.

Leider sind die Daten nicht immer aktuell (ich lese nur Nullen aus). Der 
Memory Manager scheint da etwas zu schlafen. Mit einem Sleep(500) 
funktioniert es dann. Aber soll das die Lösung sein?

von Peter II (Gast)


Lesenswert?

Ist denn überhaupt sinnvoll mit Memory Mapped Files für den 
Datenaustausch zu arbeiten?

Warum nicht Shared Memory, dann sind die daten immer sofort aktuell. 
Warum noch mal über die Fielebende gehen?

Damit sollte dein Problem auch weg sein.


Den Mutex brauchst du nur wenn wenn sonst nicht sicherstellen kannst, 
das der Schreiber schon neue Daten schreibt während der Leser noch nicht 
alles gelesen hat. Der Leser sieht also Teiweise neue und alte Daten. 
Was das für dich ein Problem ist, dann brauchst du einen Mutex.

von Peter (Gast)


Lesenswert?

Peter II schrieb:
> Warum nicht Shared Memory, dann sind die daten immer sofort aktuell.
> Warum noch mal über die Fielebende gehen?

Bzgl. der File-Ebene kann man die MMFs auch rein virtuell erstellen. Das 
hat nichts mit Dateien auf der Festplatte zu tun.

Das mit dem Shared Memory kannte ich noch garnicht. Werd ich mir aber 
gleich mal anschauen. Ich hoffe nur, das ist nicht das gleiche wie die 
virtuellen MMFs.

Danke für den Tipp!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.