Hi
Ich Programier momentan mit nem Embeded os. da ist das in etwa so gelöst.
1. Jeder task wird entsprechend seiner Prio reium mal der Prozessor zugeteilt.
2. Wird auf ein Signal gewartet ( Message, queue, Signal, ... ) wird die Task Susspend gesetzt, wenn nichts vorhanden ist. ( es gibt auch die möglickeit NO_Suspend auf eine Message zu warten, dann wird der aufruf mit einem fehler quitiert.
3. Sendet eine andere Task eine Message, wird diese Nachricht in z.B. die queue eingetragen. Ist die abarbeitnde Task suspendiert, wird diese aufgeweckt, um die nachricht verarbeiten zu können. Beim senden einer Message kann angegeben werden, ob die task solange warten soll, bis die message in die queue eingefügt werden kann, fals diese voll sein sollte, oder ob sie mit einem fehler zurückkehren soll, wenn dies nicht möglich war.
Heist somit, es muss eine verbindung zwischen Task und Synchronisationsobjekt ( Message, Mutex, queue, ... ) hergestellt werden.
Beim getMessage z.B. wird die Task in den zustand zuspend versetzt, wenn keine nachricht vorhanden ist. Weiter wird im Message OBJ noch vermekrt welche Task darauf wartet. (im einfachsten fall ist es nur eine Task, im komplizierteren können es Mehrere sein, Threadpool) Wird jetzt von einer anderen task eine Message abgesetzt sendMessage, wird die Nachricht in das OBJ eingetragen. sollte eine wartende Task eingetragen sein, wird ihr suspend zustand aufgehoben, so das die die Message abholen kann.
Dedlog situationen können dabei immer auftreten. dies liegt aber meist an der Programmstrucktur, wen z.B. a auf b wartet und b auf a. Nicht an den Synchronisationselementen selber.
gruss