1 1544f909 2004-12-25 devnull #include "u.h"
2 1544f909 2004-12-25 devnull #include "libc.h"
3 1544f909 2004-12-25 devnull #include "thread.h"
7 1544f909 2004-12-25 devnull STACK = 8192
10 1544f909 2004-12-25 devnull int max = 10000;
11 1544f909 2004-12-25 devnull int (*mk)(void (*fn)(void*), void *arg, uint stack);
12 f6127ed2 2005-01-04 devnull void printmsg(void*, char*);
15 1544f909 2004-12-25 devnull countthread(void *v)
18 1544f909 2004-12-25 devnull Channel *c;
21 1544f909 2004-12-25 devnull for(i=2;; i++){
22 1544f909 2004-12-25 devnull sendul(c, i);
27 1544f909 2004-12-25 devnull filterthread(void *v)
29 1544f909 2004-12-25 devnull uint i, p;
30 1544f909 2004-12-25 devnull Channel *c, *nextc;
33 1544f909 2004-12-25 devnull p = recvul(c);
34 1544f909 2004-12-25 devnull print("%d\n", p);
35 1544f909 2004-12-25 devnull if(p > max)
36 1544f909 2004-12-25 devnull threadexitsall(0);
37 1544f909 2004-12-25 devnull nextc = chancreate(sizeof(ulong), 0);
38 1544f909 2004-12-25 devnull mk(filterthread, nextc, STACK);
40 1544f909 2004-12-25 devnull i = recvul(c);
42 1544f909 2004-12-25 devnull sendul(nextc, i);
47 1544f909 2004-12-25 devnull usage(void)
49 1544f909 2004-12-25 devnull fprint(2, "usage: tprimes [-p] [max]\n");
50 1544f909 2004-12-25 devnull threadexitsall("usage");
54 1544f909 2004-12-25 devnull threadmain(int argc, char **argv)
56 1544f909 2004-12-25 devnull Channel *c;
57 1544f909 2004-12-25 devnull int nbuf;
59 f6127ed2 2005-01-04 devnull notify(printmsg);
60 1544f909 2004-12-25 devnull nbuf = 0;
61 1544f909 2004-12-25 devnull mk = threadcreate;
62 1544f909 2004-12-25 devnull ARGBEGIN{
65 1544f909 2004-12-25 devnull case 'b':
66 1544f909 2004-12-25 devnull nbuf = atoi(EARGF(usage()));
68 1544f909 2004-12-25 devnull case 'p':
69 1544f909 2004-12-25 devnull mk = proccreate;
70 1544f909 2004-12-25 devnull max = 1000;
74 1544f909 2004-12-25 devnull if(argc == 1)
75 1544f909 2004-12-25 devnull max = atoi(argv[0]);
76 1544f909 2004-12-25 devnull else if(argc)
79 1544f909 2004-12-25 devnull c = chancreate(sizeof(ulong), nbuf);
80 1544f909 2004-12-25 devnull mk(countthread, c, STACK);
81 1544f909 2004-12-25 devnull mk(filterthread, c, STACK);
82 4dbefdd4 2004-12-27 devnull recvp(chancreate(sizeof(void*), 0));
86 f6127ed2 2005-01-04 devnull printmsg(void *v, char *msg)
88 f6127ed2 2005-01-04 devnull print("note: %s\n", msg);