#include #include #include void altproc(void *arg) { Alt a[2]; int i; a[0].c = arg; a[0].v = nil; a[0].op = CHANRCV; a[1].op = CHANEND; for(;;) { switch(i = alt(a)) { case 0: print("a[%d]\n", i); if(chanclosing(a[i].c) == 0) { print("a[%d].c closed\n", i); continue; } break; default: print("altproc exiting\n"); threadexits(nil); } } } void threadmain(int, char **) { Channel *c; c = chancreate(sizeof(void *), 0); threadcreate(altproc, c, 1024); if(1) chanclose(c); chanfree(c); print("closed c\n"); print("threadmain exiting\n"); threadexits(nil); }