Blame


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