aboutsummaryrefslogtreecommitdiffstats
path: root/wait_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'wait_test.c')
-rw-r--r--wait_test.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/wait_test.c b/wait_test.c
new file mode 100644
index 0000000..0ac6a4f
--- /dev/null
+++ b/wait_test.c
@@ -0,0 +1,102 @@
1#include <stdio.h>
2#include <stdlib.h>
3#include <signal.h>
4#include <unistd.h>
5#include <sys/time.h>
6#include <sys/wait.h>
7#include <sys/types.h>
8#include <sys/stat.h>
9#include <fcntl.h>
10
11#include "litmus.h"
12
13#define US_PER_MS 1000
14
15#define NUMTASKS 4
16
17int prefix(void)
18{
19 char field[1024];
20 int prefix[1024];
21 int i, sum = 0;
22
23 for (i = 0; i < 1024; i++) {
24 sum += field[i];
25 prefix[i] = sum;
26 }
27 return sum;
28}
29
30
31void do_stuff(void)
32{
33 int i =0, j =0;
34
35 for (; i < 50000; i++)
36 j += prefix();
37}
38
39#define CALL(sc) do { ret = sc; if (ret == -1) {perror(" (!!) " #sc " failed: "); /*exit(1)*/;}} while (0);
40
41unsigned int job_no;
42
43
44void next(void)
45{
46 int ret;
47 unsigned int actual;
48 CALL(get_job_no(&actual));
49 CALL(wait_for_job_release(++job_no));
50 printf("Now executing job %u, waited for %u\n", actual, job_no);
51}
52
53void sync_jobs(void)
54{
55 int ret;
56 unsigned int actual;
57 CALL(get_job_no(&actual));
58 job_no = actual;
59}
60
61
62int main(int argc, char** argv)
63{
64 int ret;
65
66
67 CALL(getpid());
68 printf("my pid is %d\n", ret);
69
70
71 CALL(get_job_no(&job_no));
72 printf("my job_no is %u", job_no);
73
74 next();
75 next();
76 next();
77
78 /* now overrun a job for good */
79 do_stuff();
80 do_stuff();
81 do_stuff();
82 do_stuff();
83 do_stuff();
84 do_stuff();
85 do_stuff();
86 do_stuff();
87 do_stuff();
88 do_stuff();
89
90
91 next();
92 next();
93 next();
94 next();
95 sync_jobs();
96 next();
97 next();
98 next();
99
100
101 return 0;
102}