diff options
Diffstat (limited to 'performance-tests/Synch-Benchmarks/context.c')
-rw-r--r-- | performance-tests/Synch-Benchmarks/context.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/performance-tests/Synch-Benchmarks/context.c b/performance-tests/Synch-Benchmarks/context.c new file mode 100644 index 00000000000..0ac4264bd00 --- /dev/null +++ b/performance-tests/Synch-Benchmarks/context.c @@ -0,0 +1,72 @@ +#include <stdio.h> +// @(#)context.c 1.1 10/18/96 + +#include <stdlib.h> +#include <thread.h> + +#define NSLEEP 100 +#define TMAX 2 +int count[TMAX]; + +void * +work (void *n) +{ + int ni = (int) n; + + while (1) + { + thr_yield (); + count[ni]++; + } + return 0; +} + +main (int argc, char *argv[]) +{ + int ncorr, t1arg, t0arg, orig_ncorr; + thread_t tid1, tid0; + float rate; + + if (argc != 6) + { + printf ("usage: %s t0_bound t0_new_lwp t1_bound t1_new_lwp ncorr\n", argv[0]); + exit (1); + } + t0arg = THR_DETACHED; + if (atoi (argv[1])) + t0arg |= THR_BOUND; + if (atoi (argv[2])) + t0arg |= THR_NEW_LWP; + + t1arg = THR_DETACHED; + if (atoi (argv[3])) + t1arg |= THR_BOUND; + if (atoi (argv[4])) + t1arg |= THR_NEW_LWP; + + ncorr = atoi (argv[5]); + + if (thr_create (NULL, 0, work, 0, t0arg, &tid0) != 0) + perror ("couldn't create thread 0"); + if (thr_create (NULL, 0, work, (void *) 1, t1arg, &tid1) != 0) + perror ("couldn't create thread 1"); + + orig_ncorr = thr_getconcurrency (); + if (ncorr) + thr_setconcurrency (ncorr); + sleep (NSLEEP); + rate = (count[0] + count[1]) / ((float) NSLEEP); + printf ("\n------------------------------------------------------------------------\n"); + printf ("t0arg 0x%x (%s, %s, %s)\nt1arg 0x%x (%s, %s, %s)\ncount[0] %d count[1] %d\n\ +ncorr_orig %d ncorr_set %d ncorr_end %d rate %.3f per_cxt %.2f usec\n", + t0arg, + (t0arg & THR_DETACHED) ? "THR_DETACHED" : "Not Detached", + (t0arg & THR_BOUND) ? "THR_BOUND" : "Not Bound", + (t0arg & THR_NEW_LWP) ? "THR_NEW_LWP" : "No New_LWP", + t1arg, + (t1arg & THR_DETACHED) ? "THR_DETACHED" : "Not Detached", + (t1arg & THR_BOUND) ? "THR_BOUND" : "Not Bound", + (t1arg & THR_NEW_LWP) ? "THR_NEW_LWP" : "No New_LWP", + count[0], count[1], + orig_ncorr, ncorr, thr_getconcurrency (), rate, 1.0e6 / rate); +} |