Hex Artifact Content
Not logged in

Artifact be5b7d0a2c0328049cd5e2ce54f633174a64b2c6:


0000: 2f 2a 20 43 6f 70 79 72 69 67 68 74 20 28 63 29  /* Copyright (c)
0010: 20 32 30 30 35 20 52 75 73 73 20 43 6f 78 2c 20   2005 Russ Cox, 
0020: 4d 49 54 3b 20 73 65 65 20 43 4f 50 59 52 49 47  MIT; see COPYRIG
0030: 48 54 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20  HT */..#include 
0040: 22 74 61 73 6b 69 6d 70 6c 2e 68 22 0a 0a 69 6e  "taskimpl.h"..in
0050: 74 20 71 75 69 65 74 3b 0a 69 6e 74 20 67 6f 61  t quiet;.int goa
0060: 6c 3b 0a 69 6e 74 20 62 75 66 66 65 72 3b 0a 0a  l;.int buffer;..
0070: 76 6f 69 64 0a 70 72 69 6d 65 74 61 73 6b 28 76  void.primetask(v
0080: 6f 69 64 20 2a 61 72 67 29 0a 7b 0a 09 43 68 61  oid *arg).{..Cha
0090: 6e 6e 65 6c 20 2a 63 2c 20 2a 6e 63 3b 0a 09 69  nnel *c, *nc;..i
00a0: 6e 74 20 70 2c 20 69 3b 0a 09 63 20 3d 20 61 72  nt p, i;..c = ar
00b0: 67 3b 0a 0a 09 70 20 3d 20 72 65 63 76 75 6c 28  g;...p = recvul(
00c0: 63 29 3b 0a 09 69 66 28 70 20 3e 20 67 6f 61 6c  c);..if(p > goal
00d0: 29 0a 09 09 74 61 73 6b 65 78 69 74 61 6c 6c 28  )...taskexitall(
00e0: 30 29 3b 0a 09 69 66 28 21 71 75 69 65 74 29 0a  0);..if(!quiet).
00f0: 09 09 70 72 69 6e 74 28 22 25 64 5c 6e 22 2c 20  ..print("%d\n", 
0100: 70 29 3b 0a 09 6e 63 20 3d 20 63 68 61 6e 63 72  p);..nc = chancr
0110: 65 61 74 65 28 73 69 7a 65 6f 66 28 75 6e 73 69  eate(sizeof(unsi
0120: 67 6e 65 64 20 6c 6f 6e 67 29 2c 20 62 75 66 66  gned long), buff
0130: 65 72 29 3b 0a 09 74 61 73 6b 63 72 65 61 74 65  er);..taskcreate
0140: 28 70 72 69 6d 65 74 61 73 6b 2c 20 6e 63 2c 20  (primetask, nc, 
0150: 38 31 39 32 29 3b 0a 09 66 6f 72 28 3b 3b 29 7b  8192);..for(;;){
0160: 0a 09 09 69 20 3d 20 72 65 63 76 75 6c 28 63 29  ...i = recvul(c)
0170: 3b 0a 09 09 69 66 28 69 25 70 29 0a 09 09 09 73  ;...if(i%p)....s
0180: 65 6e 64 75 6c 28 6e 63 2c 20 69 29 3b 0a 09 7d  endul(nc, i);..}
0190: 0a 7d 0a 0a 76 6f 69 64 0a 74 61 73 6b 6d 61 69  .}..void.taskmai
01a0: 6e 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  n(int argc, char
01b0: 20 2a 2a 61 72 67 76 29 0a 7b 0a 09 69 6e 74 20   **argv).{..int 
01c0: 69 3b 0a 09 43 68 61 6e 6e 65 6c 20 2a 63 3b 0a  i;..Channel *c;.
01d0: 0a 09 69 66 28 61 72 67 63 3e 31 29 0a 09 09 67  ..if(argc>1)...g
01e0: 6f 61 6c 20 3d 20 61 74 6f 69 28 61 72 67 76 5b  oal = atoi(argv[
01f0: 31 5d 29 3b 0a 09 65 6c 73 65 0a 09 09 67 6f 61  1]);..else...goa
0200: 6c 20 3d 20 31 30 30 3b 0a 70 72 69 6e 74 28 22  l = 100;.print("
0210: 74 61 73 6b 6d 61 69 6e 20 67 6f 61 6c 3d 25 64  taskmain goal=%d
0220: 5c 6e 22 2c 20 67 6f 61 6c 29 3b 0a 0a 09 63 20  \n", goal);...c 
0230: 3d 20 63 68 61 6e 63 72 65 61 74 65 28 73 69 7a  = chancreate(siz
0240: 65 6f 66 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  eof(unsigned lon
0250: 67 29 2c 20 62 75 66 66 65 72 29 3b 0a 09 74 61  g), buffer);..ta
0260: 73 6b 63 72 65 61 74 65 28 70 72 69 6d 65 74 61  skcreate(primeta
0270: 73 6b 2c 20 63 2c 20 38 31 39 32 29 3b 0a 09 66  sk, c, 8192);..f
0280: 6f 72 28 69 3d 32 3b 3b 20 69 2b 2b 29 0a 09 09  or(i=2;; i++)...
0290: 73 65 6e 64 75 6c 28 63 2c 20 69 29 3b 0a 7d 0a  sendul(c, i);.}.
02a0: 0a 76 6f 69 64 2a 0a 65 6d 61 6c 6c 6f 63 28 75  .void*.emalloc(u
02b0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6e 29 0a  nsigned long n).
02c0: 7b 0a 09 72 65 74 75 72 6e 20 63 61 6c 6c 6f 63  {..return calloc
02d0: 28 6e 20 2c 31 29 3b 0a 7d 0a 0a 6c 6f 6e 67 0a  (n ,1);.}..long.
02e0: 6c 72 61 6e 64 28 76 6f 69 64 29 0a 7b 0a 09 72  lrand(void).{..r
02f0: 65 74 75 72 6e 20 72 61 6e 64 28 29 3b 0a 7d 0a  eturn rand();.}.