[Stackless] Scheduling Examples, Problems, Solutions, and Questions

Ásgeir Bjarni Ingvarsson istari at hlekkir.com
Wed Dec 14 13:55:51 CET 2005


The reason your channel sample stops is because:
     1. E is waiting for C -> goto 2
     2. C is waiting for B -> goto 3
     3. B is waiting for E -> goto 1
You become sensitive to the order in which the joins are made.

---

Queue.put only blocks if there is someone waiting on the channel.
Queue.get only blocks if there is no data waiting.

B will send "simultaneously" to C and E.
     Since E has not called get on the BtoE queue
     and C has not called get on the BtoC queue.
     This means B is free to push it's data without blocking.
E is waiting for C so it will not resume.
     E has called get on the CtoE queue and is blocked in recieve
C resumes and when it finishes it sends to D and E.
E has been waiting for C so now it's recieve on the C channel returns
     There is already data on the BtoE queue so it does not have to
     block.


_______________________________________________
Stackless mailing list
Stackless at stackless.com
http://www.stackless.com/mailman/listinfo/stackless



More information about the Stackless mailing list