diff options
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; +} |