piControl

Rund um die Software von Revolution Pi
Post Reply
Heron
Posts: 40
Joined: 13 Jul 2017, 15:30

piControl

Post 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
User avatar
Mathias
Posts: 130
Joined: 29 Nov 2016, 10:46

Re: piControl

Post 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
Heron
Posts: 40
Joined: 13 Jul 2017, 15:30

Re: piControl

Post 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
Post Reply