summaryrefslogtreecommitdiff
path: root/tests/count1.c
diff options
context:
space:
mode:
authorbje <bje>1999-02-20 05:45:45 +0000
committerbje <bje>1999-02-20 05:45:45 +0000
commit46cb13531327c59ce4e3189e1a5b1763ed248095 (patch)
tree287011531651457cdc018e13df8c23e368871b89 /tests/count1.c
parent60784dc1a92121efe9301ac57476024fe64f968b (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.c62
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;
+}