diff options
author | bje <bje> | 1999-02-20 05:45:45 +0000 |
---|---|---|
committer | bje <bje> | 1999-02-20 05:45:45 +0000 |
commit | 46cb13531327c59ce4e3189e1a5b1763ed248095 (patch) | |
tree | 287011531651457cdc018e13df8c23e368871b89 /tests/count1.c | |
parent | 60784dc1a92121efe9301ac57476024fe64f968b (diff) |
1999-02-21 Ben Elliston <bje@cygnus.com>snap-1999-02-21
* README: Update.
* Makefile: New file. Run all tests automatically. Primitive tests
are run first; more complex tests are run last.
* count1.c: New test. Validate the thread count.
* exit2.c: Perform a simpler test.
* exit3.c: New test. Replaces exit2.c, since exit2.c needs to
perform simpler checking first.
* create1.c: Update to use the new testsuite exiting convention.
* equal1.c: Likewise.
* mutex1.c: Likewise.
* mutex2.c: Likewise.
* once1.c: Likewise.
* self2.c: Likewise.
* self3.c: Likewise.
* tsd1.c: Likewise.
Diffstat (limited to 'tests/count1.c')
-rw-r--r-- | tests/count1.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/count1.c b/tests/count1.c new file mode 100644 index 0000000..c4e0c4e --- /dev/null +++ b/tests/count1.c @@ -0,0 +1,62 @@ +/* + * count1.c + * + * Written by Ben Elliston <bje@cygnus.com>. + * + * Description: + * Test some basic assertions about the number of threads at runtime. + */ + +#include <windows.h> +#include <pthread.h> + +static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_t threads[10]; +static unsigned numThreads = 1; + +void * +myfunc(void *arg) +{ + pthread_mutex_lock(&lock); + numThreads++; + pthread_mutex_unlock(&lock); + + Sleep(1000); + return 0; +} +int +main() +{ + int i, result; + int maxThreads = sizeof(threads) / sizeof(pthread_t); + + /* Spawn ten threads. Each thread should increment the numThreads + variable, sleep for one second, decrement the variable and then + exit. The final result of numThreads should be 1 again. */ + for (i = 0; i < maxThreads; i++) + { + result = pthread_create(&threads[i], NULL, myfunc, 0); + if (result != 0) + { + return 1; + } + } + + /* Wait for all the threads to exit. */ + for (i = 0; i < maxThreads; i++) + { + pthread_join(threads[i], NULL); + pthread_mutex_lock(&lock); + numThreads--; + pthread_mutex_unlock(&lock); + } + + /* Check the number of live threads. */ + if (numThreads != 1) + { + return 1; + } + + /* Success. */ + return 0; +} |