diff options
Diffstat (limited to 'tests/reuse2.c')
-rw-r--r-- | tests/reuse2.c | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/tests/reuse2.c b/tests/reuse2.c index 625611e..12aaa5f 100644 --- a/tests/reuse2.c +++ b/tests/reuse2.c @@ -53,7 +53,9 @@ * - * * Environment: - * - + * - This test is implementation specific + * because it uses knowledge of internals that should be + * opaque to an application. * * Input: * - None. @@ -74,6 +76,9 @@ #include "test.h" +/* + */ + enum { NUMTHREADS = 10000 }; @@ -95,11 +100,11 @@ main() { pthread_t t[NUMTHREADS]; pthread_attr_t attr; - int i, j; - int reuse, - reuseMax = 0, - reuseMin = NUMTHREADS, - idTotal = 0; + int i; + unsigned int notUnique = 0, + totalHandles = 0, + reuseMax = 0, + reuseMin = NUMTHREADS; assert(pthread_attr_init(&attr) == 0); assert(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) == 0); @@ -120,43 +125,39 @@ main() */ for (i = 0; i < NUMTHREADS; i++) { - reuse = 0; + if (t[i].p != NULL) + { + unsigned int j, thisMax; - if (t[i] == NULL) - continue; + thisMax = t[i].x; - for (j = 0; j < i; j++) - { - if (t[j] == t[i]) - { - reuse++; - t[j] = NULL; - } - } - for (j = i + 1; j < NUMTHREADS; j++) - { - if (t[j] == t[i]) - { - reuse++; - t[j] = NULL; - } + for (j = i+1; j < NUMTHREADS; j++) + if (t[i].p == t[j].p) + { + if (t[i].x == t[j].x) + notUnique++; + if (thisMax < t[j].x) + thisMax = t[j].x; + t[j].p = NULL; + } + + if (reuseMin > thisMax) + reuseMin = thisMax; + + if (reuseMax < thisMax) + reuseMax = thisMax; } - if (reuseMax < reuse) - reuseMax = reuse; - if (reuseMin > reuse) - reuseMin = reuse; } for (i = 0; i < NUMTHREADS; i++) - { - if (t[i] != NULL) - idTotal++; - } + if (t[i].p != NULL) + totalHandles++; printf("For %d total threads:\n", NUMTHREADS); - printf("Reuse maximum = %d\n", reuseMax); - printf("Reuse minimum = %d\n", reuseMin); - printf("Total thread IDs allocated = %d\n", idTotal); + printf("Non-unique IDs = %d\n", notUnique); + printf("Reuse maximum = %d\n", reuseMax); + printf("Reuse minimum = %d\n", reuseMin); + printf("Total handles = %d\n", totalHandles); return 0; } |