Blob
1 #include <u.h>2 #include <libc.h>3 #include <thread.h>5 enum6 {7 STACK = 81928 };10 int quiet;11 int goal;12 int buffer;13 int (*fn)(void(*)(void*), void*, uint) = threadcreate;15 void16 primethread(void *arg)17 {18 Channel *c, *nc;19 int p, i;21 c = arg;22 p = recvul(c);23 if(p > goal)24 threadexitsall(nil);25 if(!quiet)26 print("%d\n", p);27 nc = chancreate(sizeof(ulong), buffer);28 (*fn)(primethread, nc, STACK);29 for(;;){30 i = recvul(c);31 if(i%p)32 sendul(nc, i);33 }34 }36 extern int _threaddebuglevel;38 void39 threadmain(int argc, char **argv)40 {41 int i;42 Channel *c;44 ARGBEGIN{45 case 'D':46 _threaddebuglevel = atoi(ARGF());47 break;48 case 'q':49 quiet = 1;50 break;51 case 'b':52 buffer = atoi(ARGF());53 break;54 case 'p':55 fn=proccreate;56 break;57 }ARGEND59 if(argc>0)60 goal = atoi(argv[0]);61 else62 goal = 100;64 c = chancreate(sizeof(ulong), buffer);65 (*fn)(primethread, c, STACK);66 for(i=2;; i++)67 sendul(c, i);68 }