Blob


1 #include <lib9.h>
2 #include <thread.h>
4 int quiet;
5 int goal;
6 int buffer;
7 int (*fn)(void(*)(void*), void*, uint) = threadcreate;
9 void
10 primethread(void *arg)
11 {
12 Channel *c, *nc;
13 int p, i;
15 c = arg;
16 p = recvul(c);
17 if(p > goal)
18 threadexitsall(nil);
19 if(!quiet)
20 print("%d\n", p);
21 nc = chancreate(sizeof(ulong), buffer);
22 (*fn)(primethread, nc, 8192);
23 for(;;){
24 i = recvul(c);
25 if(i%p)
26 sendul(nc, i);
27 }
28 }
30 extern int _threaddebuglevel;
32 void
33 threadmain(int argc, char **argv)
34 {
35 int i;
36 Channel *c;
38 ARGBEGIN{
39 case 'D':
40 _threaddebuglevel = atoi(ARGF());
41 break;
42 case 'q':
43 quiet = 1;
44 break;
45 case 'b':
46 buffer = atoi(ARGF());
47 break;
48 case 'p':
49 fn=proccreate;
50 break;
51 }ARGEND
53 if(argc>0)
54 goal = atoi(argv[0]);
55 else
56 goal = 100;
58 c = chancreate(sizeof(ulong), buffer);
59 (*fn)(primethread, c, 8192);
60 for(i=2;; i++)
61 sendul(c, i);
62 }