123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include <u.h>
- #include <lib9.h>
- #include <thread.h>
- enum
- {
- STACK = 2048,
- };
- void
- clockproc(void *arg)
- {
- int t;
- Channel *c;
- c = arg;
- for(t=0;; t++){
- sleep(100);
- sendul(c, t);
- }
- }
- void
- threadmain(int argc, char *argv[])
- {
- int tick, tock;
- Alt a[] = {
- {nil, &tick, CHANRCV},
- {nil, &tock, CHANRCV},
- {nil, nil, CHANEND},
- };
- fprint(2, "threadmain hi!\n");
- a[0].c = chancreate(sizeof tick, 0);
- a[1].c = chancreate(sizeof tock, 0);
- proccreate(clockproc, a[0].c, STACK);
- proccreate(clockproc, a[1].c, STACK);
- tick = 0;
- tock = 0;
- while(tick < 10 || tock < 10){
- switch(alt(a)){
- case 0:
- fprint(2, "tick %d\n", tick);
- break;
- case 1:
- fprint(2, "tock %d\n", tock);
- break;
- default:
- sysfatal("can't happen");
- }
- }
- print("PASS\n");
- threadexitsall("PASS");
- }
|