New thread library
This commit is contained in:
parent
7788fd5409
commit
1544f90960
70 changed files with 1041 additions and 4684 deletions
80
src/libthread/test/tprimes.c
Normal file
80
src/libthread/test/tprimes.c
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
#include "u.h"
|
||||
#include "libc.h"
|
||||
#include "thread.h"
|
||||
|
||||
enum
|
||||
{
|
||||
STACK = 8192
|
||||
};
|
||||
|
||||
int max = 10000;
|
||||
int (*mk)(void (*fn)(void*), void *arg, uint stack);
|
||||
|
||||
void
|
||||
countthread(void *v)
|
||||
{
|
||||
uint i;
|
||||
Channel *c;
|
||||
|
||||
c = v;
|
||||
for(i=2;; i++){
|
||||
sendul(c, i);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
filterthread(void *v)
|
||||
{
|
||||
uint i, p;
|
||||
Channel *c, *nextc;
|
||||
|
||||
c = v;
|
||||
p = recvul(c);
|
||||
print("%d\n", p);
|
||||
if(p > max)
|
||||
threadexitsall(0);
|
||||
nextc = chancreate(sizeof(ulong), 0);
|
||||
mk(filterthread, nextc, STACK);
|
||||
for(;;){
|
||||
i = recvul(c);
|
||||
if(i%p)
|
||||
sendul(nextc, i);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: tprimes [-p] [max]\n");
|
||||
threadexitsall("usage");
|
||||
}
|
||||
|
||||
void
|
||||
threadmain(int argc, char **argv)
|
||||
{
|
||||
Channel *c;
|
||||
int nbuf;
|
||||
|
||||
nbuf = 0;
|
||||
mk = threadcreate;
|
||||
ARGBEGIN{
|
||||
default:
|
||||
usage();
|
||||
case 'b':
|
||||
nbuf = atoi(EARGF(usage()));
|
||||
break;
|
||||
case 'p':
|
||||
mk = proccreate;
|
||||
max = 1000;
|
||||
break;
|
||||
}ARGEND
|
||||
|
||||
if(argc == 1)
|
||||
max = atoi(argv[0]);
|
||||
else if(argc)
|
||||
usage();
|
||||
|
||||
c = chancreate(sizeof(ulong), nbuf);
|
||||
mk(countthread, c, STACK);
|
||||
mk(filterthread, c, STACK);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue