summaryrefslogtreecommitdiff
path: root/libpthread/tests/test-1.c
diff options
context:
space:
mode:
authormarcus <marcus>2004-03-18 02:44:20 +0000
committermarcus <marcus>2004-03-18 02:44:20 +0000
commit82dcb58429439e48e973c6b9772f60d27db15d89 (patch)
treef10beac43fb87c25dc71af4e654da03c71ad8e28 /libpthread/tests/test-1.c
parentfc975a0a67947f11ef0ac09278ae16b6c68d1bf3 (diff)
2004-03-17 Marcus Brinkmann <marcus@gnu.org>
* libpthread: New directory, populated with Neal H. Walfields pthread implementation.
Diffstat (limited to 'libpthread/tests/test-1.c')
-rw-r--r--libpthread/tests/test-1.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/libpthread/tests/test-1.c b/libpthread/tests/test-1.c
new file mode 100644
index 0000000..86c7c97
--- /dev/null
+++ b/libpthread/tests/test-1.c
@@ -0,0 +1,49 @@
+#define _GNU_SOURCE
+
+#include <pthread.h>
+#include <unistd.h>
+#include <error.h>
+#include <errno.h>
+#include <stdio.h>
+
+#define THREADS 500
+
+void *
+foo (void *arg)
+{
+ pthread_mutex_t *mutex = arg;
+ pthread_mutex_lock (mutex);
+ pthread_mutex_unlock (mutex);
+ return mutex;
+}
+
+int
+main (int argc, char **argv)
+{
+ int i;
+ error_t err;
+ pthread_t tid[THREADS];
+ pthread_mutex_t mutex[THREADS];
+
+ for (i = 0; i < THREADS; i ++)
+ {
+ mutex[i] = PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock (&mutex[i]);
+ err = pthread_create (&tid[i], 0, foo, &mutex[i]);
+ if (err)
+ error (1, err, "pthread_create");
+ sched_yield ();
+ }
+
+ for (i = THREADS - 1; i >= 0; i --)
+ {
+ void *ret;
+ pthread_mutex_unlock (&mutex[i]);
+ err = pthread_join (tid[i], &ret);
+ if (err)
+ error (1, err, "pthread_join");
+ assert (ret == &mutex[i]);
+ }
+
+ return 0;
+}