summaryrefslogtreecommitdiff
path: root/tests/mutex3.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mutex3.c')
-rw-r--r--tests/mutex3.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/tests/mutex3.c b/tests/mutex3.c
index 2bb6106..26cb070 100644
--- a/tests/mutex3.c
+++ b/tests/mutex3.c
@@ -1,12 +1,44 @@
-#include <pthread.h>
+/*
+ * mutex3.c
+ *
+ * Declare a static mutex object, lock it, trylock it,
+ * and then unlock it again.
+ *
+ * Depends on API functions:
+ * pthread_mutex_lock()
+ * pthread_mutex_trylock()
+ * pthread_mutex_unlock()
+ */
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+#include "test.h"
+
+pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
+static int washere = 0;
+
+void * func(void * arg)
+{
+ assert(pthread_mutex_trylock(&mutex1) == EBUSY);
+
+ washere = 1;
+
+ return 0;
+}
+
int
main()
{
- pthread_mutex_lock(&mutex);
- /* do stuff */
- pthread_mutex_unlock(&mutex);
+ pthread_t t;
+
+ assert(pthread_mutex_lock(&mutex1) == 0);
+
+ assert(pthread_create(&t, NULL, func, NULL) == 0);
+
+ Sleep(2000);
+
+ assert(pthread_mutex_unlock(&mutex1) == 0);
+
+ assert(washere == 1);
+
return 0;
}