Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/testsuite/winsup.api/pthread/once1.c')
-rw-r--r--winsup/testsuite/winsup.api/pthread/once1.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/winsup/testsuite/winsup.api/pthread/once1.c b/winsup/testsuite/winsup.api/pthread/once1.c
new file mode 100644
index 000000000..91dc03832
--- /dev/null
+++ b/winsup/testsuite/winsup.api/pthread/once1.c
@@ -0,0 +1,45 @@
+/*
+ * once1.c
+ *
+ * Create a static pthread_once and test that it calls myfunc once.
+ *
+ * Depends on API functions:
+ * pthread_once()
+ * pthread_create()
+ */
+
+#include "test.h"
+
+pthread_once_t once = PTHREAD_ONCE_INIT;
+
+static int washere = 0;
+
+void
+myfunc(void)
+{
+ washere++;
+}
+
+void *
+mythread(void * arg)
+{
+ assert(pthread_once(&once, myfunc) == 0);
+
+ return 0;
+}
+
+int
+main()
+{
+ pthread_t t1, t2;
+
+ assert(pthread_create(&t1, NULL, mythread, NULL) == 0);
+
+ assert(pthread_create(&t2, NULL, mythread, NULL) == 0);
+
+ Sleep(2000);
+
+ assert(washere == 1);
+
+ return 0;
+}