Thread Synchronisation

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich habe zwei Puffer mit jeweils einem Mutex und einen Thread der Daten in einen freien Puffer schreibt sowie einen Thread der Daten aus einem beschriebene Puffer schreibt. Wenn ich in beiden Threads jeweils mit WaitForMultipleObjects auf einen Puffer warte und diesen dann nach der Aktion mit ReleaseMutex wieder freigebe, kann es dann zu einen Deadlock kommen?

Code:
HANDLE handles[] = { mutex1, mutex2 };

DWORD wait = WaitForMultipleObjects(2, handles, FALSE, 10);
 
So ganz verstanden hab ich das nicht, aber:
Jeder Thread kann maximal einen Mutex/Puffer gleichzeitig für sich reservieren
(->gibt den gelockten Mutex frei, bevor ein anderer beansprucht wird)?
Dann sind Deadlocks unmöglich.
 
Also ich würde gerne erreichen, dass ein Thread den einen Puffer auslesen kann, während der andere Thread den anderen Puffer beschreibt. Dann sollen die beiden Threads die Puffer untereinander tauschen und immer so weiter.
 
Thread TA hat Mutex/Buffer MA, TB hat MB
TA ist fertig, gibt MA frei, wartet auf MB
TA wartet, MA frei, TB hat MB
TB ist fertig, gibt MB frei, lockt MA
MB ist frei geworden und wird schon wieder von TA gelockt
...

Jeder Thread gibt frei, was er hat, bevor wieder etwas lockt;
und kein Thread will zwei (oder mehr) Dinge gleichzeitig locken.
Also alles ok, keine Deadlocks möglich.

Beim Starten/Beenden der Threads etwas aufpassen, was man tut,
dann ist alles iO.
 
Zurück