def main(): m = Mutex() c = Cond(m) n = 100 running = makechan(n) awake = makechan(n) for i in range(n): go(test, i, m, c, running, awake) if i > 0: a = awake.recv() assert a == (i - 1), "wrong coroutine woke up: want %d, got %d" % (i-1, a) running.recv() with m: c.signal()
def main(): m = Mutex() c = Cond(m) n = 2 running = makechan(n) awake = makechan(n) for i in range(n): go(test, m, c, running, awake) for i in range(n): running.recv() while n > 0: ret = select(awake.if_recv(), default) assert ret != awake.if_recv(), "coroutine not asleep" m.lock() c.signal() awake.recv() ret = select(awake.if_recv(), default) assert ret != awake.if_recv(), "too many coroutines awakes" n -= 1 c.signal()