#include #include #include void blockingthread(char *@c, char *s) { print("about to do a blocking receive for %s\n", s); print("received %s\n", @c); print("thread exiting %s\n", s); } void nonblockthread(char *@c, char *s) { char *r; print("about to do a nonblocking receive for %s\n", s); switch @@{ alt r = @c: print("receivedd %s\n", r); break; } print("thread exiting %s\n", s); } void threadmain(int, char**) { char *@block, *@nonblock, *@buffered; chanset(block, 0); chanset(nonblock, 1); chanset(buffered, 20); cothread(nonblockthread(nonblock, "nonblock"), 4096); cothread(nonblockthread(block, "block"), 4096); cothread(nonblockthread(buffered, "buffered"), 4096); buffered @= "buffered"; block @= "block"; nonblock @= "nonblock"; }