Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

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