Page 1 of 1

piControl

Posted: 03 Nov 2017, 13:29
by Heron
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

Re: piControl

Posted: 03 Nov 2017, 14:52
by Mathias
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

Re: piControl

Posted: 03 Nov 2017, 16:16
by Heron
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