Blame


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