Exercise 10 - Mutex wird auf Windows 10 ignoriert

Jannis
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 15. Apr 2015 17:10

Exercise 10 - Mutex wird auf Windows 10 ignoriert

Beitrag von Jannis » 14. Jan 2018 17:05

Hallo!

Wir haben die Übung zunächst auf Linux gelöst. Dort hat mutex.lock() nach einem mutex.create() den gewünschten Effekt, dass der jeweilige Thread wartet, bis der mutex freigegeben ist. Unter Windows 10 ist uns nun aber aufgefallen, dass der Streaming-Thread den lock des anderen Threads einfach ignoriert. Er ist sogar in der Lage, mutex.lock() ohne mutex.unlock() mehrfach hintereinander auszuführen.

Muss für Windows bei einem Mutex vielleicht noch zusätzlich etwas beachtet werden?

Viele Grüße
Jannis

PS: Zusätzlich sieht es so aus, als sei mutex.tryToLock() nicht implementiert. Damit hätte man die Synchronisation noch etwas einfacher gestalten können.

RobDangerous
Computerversteher
Computerversteher
Beiträge: 363
Registriert: 14. Okt 2014 17:05

Re: Exercise 10 - Mutex wird auf Windows 10 ignoriert

Beitrag von RobDangerous » 14. Jan 2018 19:21

Tschuldigung wegen dem tryLock - das ist neu und bisher nur auf Konsolen implementiert. Ansonsten klingt das aber sehr unwahrscheinlich (außer das mit mehreren locks hintereinander, das ist nicht ungewöhnlich, solange man auf dem selben Thread arbeitet), kann ich mir das in Eurem Repo anschauen? Welches ist es?

hwuerz
Erstie
Erstie
Beiträge: 16
Registriert: 10. Nov 2016 14:56

Re: Exercise 10 - Mutex wird auf Windows 10 ignoriert

Beitrag von hwuerz » 14. Jan 2018 20:50

Hallo,

wir rufen lock() tatsächlich nach einer Initialisierung nur in dem Streaming-Thread auf und unlock() entsprechend im main-Thread sobald das Bild gelesen wurde. Die Intention dahinter ist, dass der Streaming-Thread warten muss (da der Mutex noch gelocked ist), bis das letzte geladene Bild verarbeitet wurde. Erst danach darf er ihn erneut reservieren um ein neues Bild zu laden.

Wir sind die Gruppe A_Technology_Gem. Dort gibt es den Branch exercise10-dev, bei dem wir mit einer entsprechenden Fallunterscheidung den Mutex umgangen haben. Wenn man die Zeilen 166 - 168 auskommentiert und so den Mutex verwendet, dann läuft der Speicher voll. (Dies ist logisch, da der Streaming-Thread in diesem Fall bei einem lock nicht blockiert und so immer neue Image-Objekte erstellt, die nie gelöscht werden.)

Ist das Verhalten den Mutex tatsächlich so gewünscht? Würde man unsere Intention dann mit einem booleschen Flag umsetzen (so wie es die Fallunterscheidung in den genannten Zeilen macht)?

Viele Grüße
Hendrik

RobDangerous
Computerversteher
Computerversteher
Beiträge: 363
Registriert: 14. Okt 2014 17:05

Re: Exercise 10 - Mutex wird auf Windows 10 ignoriert

Beitrag von RobDangerous » 14. Jan 2018 21:17

Normalerweise nutzt man einen Mutex so, dass man ihn auf einem Thread lockt und dann ein anderer Thread auch lockt, dadurch aber auf den unlock des ersten Threads warten muss. Windows verhält sich hier also korrekt. Auch überall sonst ist das so üblich (Java,...). Warum was Ihr macht unter Linux funktioniert, muss ich erst noch verstehen - aber lasst es so, packt uns eine Readme dazu, dann ist das in Ordnung. Und ja, solange es nur um einen Thread geht, nutzt man zum Beispiel einfach Bools.

Antworten

Zurück zu „Archiv“