summaryrefslogtreecommitdiff
path: root/tests/tsd1.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tsd1.c')
-rw-r--r--tests/tsd1.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/tsd1.c b/tests/tsd1.c
new file mode 100644
index 0000000..cb105ae
--- /dev/null
+++ b/tests/tsd1.c
@@ -0,0 +1,48 @@
+#include <pthread.h>
+#include <stdio.h>
+
+pthread_key_t key;
+pthread_once_t key_once = PTHREAD_ONCE_INIT;
+
+void
+make_key(void)
+{
+ (void) pthread_key_create(&key, free);
+}
+
+void *
+mythread(void * arg)
+{
+ void *ptr;
+
+ (void) pthread_once(&key_once, make_key);
+ if ((ptr = pthread_getspecific(key)) == NULL)
+ {
+ ptr = malloc(80);
+ sprintf(ptr, "Thread %d\n", (int) arg);
+ (void) pthread_setspecific(key, ptr);
+ }
+
+ if (pthread_getspecific(key) == NULL)
+ printf((char *) pthread_getspecific(key));
+ else
+ printf("Failed %d\n", (int) arg);
+
+ return 0;
+}
+
+int
+main()
+{
+ int rc;
+ pthread_t t1, t2;
+
+ rc = pthread_create(&t1, NULL, mythread, 1);
+ printf("pthread_create returned %d\n", rc);
+
+ rc = pthread_create(&t2, NULL, mythread, 2);
+ printf("pthread_create returned %d\n", rc);
+
+ Sleep(2000);
+ return 0;
+}