Hallo,
ich habe festgestellt, dass, wenn verschiedene Prozesse auf piControl zugreifen, es immer wieder zu Fehllesungen kommt, wenn gleichzeitig auf piControl zugegriffen wird.
D.h. es wird in diesen Fällen "Mist" eingelesen.
Ich kann nun innerhalb eines Prozesses die Threads so einstellen (zBsp. über ein internes lock), dass die Kollisionen verhindert werden - Was auch sehr gut funktioniert.
Prozessübergreifend funktioniert das aber nicht mehr.
Gibt es da eine Lösung? Oder kann man (bzw. Ihr), piControl an dieser Stelle Thread-/Prozess - safe machen?
Gruß,
Heron
piControl
Hallo Heron,
beim Zugriff auf das Prozessabbild wird ja immer ein seek und dann ein read oder write aufruf gemacht. Dabei wird im Filehandle die Position, die bei seek übergeben wurde, bis zum Aufruf von read/write gespeichert. Wenn du mehrere Threads hast, die das gleiche Filehandle benutzen kann es vorkommen, dass zwischen seek und read/write der Thread gewechselt wird und dann liest du die falschen Daten.
Die Lösung ist ganz einfach: jeder Thread muss seinen eigenen Filehandle haben und selbst open und close aufrufen.
Gruß
Mathias
beim Zugriff auf das Prozessabbild wird ja immer ein seek und dann ein read oder write aufruf gemacht. Dabei wird im Filehandle die Position, die bei seek übergeben wurde, bis zum Aufruf von read/write gespeichert. Wenn du mehrere Threads hast, die das gleiche Filehandle benutzen kann es vorkommen, dass zwischen seek und read/write der Thread gewechselt wird und dann liest du die falschen Daten.
Die Lösung ist ganz einfach: jeder Thread muss seinen eigenen Filehandle haben und selbst open und close aufrufen.
Gruß
Mathias
Danke,
das erschlägt ja mein Problem ja schlagartig.
Innerhalb eines Prozesses habe ich ein File Handle, d.h. hier hilft der lock. Jeder Prozess hat sein eigenen Handle, d.h. es sollte so passen.
Gruß,
Heron
das erschlägt ja mein Problem ja schlagartig.
Innerhalb eines Prozesses habe ich ein File Handle, d.h. hier hilft der lock. Jeder Prozess hat sein eigenen Handle, d.h. es sollte so passen.
Gruß,
Heron