From 22ec3cfd85228b6910f2f6b61626eb13c14636d7 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 28 Mar 2011 23:01:42 -0400 Subject: primitive condition var test --- pthread.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pthread.c b/pthread.c index 14fbc4a..a851340 100644 --- a/pthread.c +++ b/pthread.c @@ -69,6 +69,15 @@ static void *start6(void *arg) return 0; } +static void *start7(void *arg) +{ + void **args = arg; + pthread_mutex_lock(args[1]); + pthread_cond_signal(args[0]); + pthread_mutex_unlock(args[1]); + return 0; +} + int test_pthread(void) { @@ -80,6 +89,7 @@ int test_pthread(void) pthread_barrier_t barrier2; pthread_mutexattr_t mtx_a; pthread_mutex_t mtx, *sh_mtx; + pthread_cond_t cond; int fd; TEST(r, pthread_barrier_init(&barrier2, 0, 2), 0, "creating barrier"); @@ -157,5 +167,16 @@ int test_pthread(void) //TEST(r, (fd=open("/dev/zero", O_RDWR))>=0, 1, "opening zero page file"); //TEST(r, + /* Condition variables */ + TEST(r, pthread_mutex_init(&mtx, 0), 0, "%d != %d"); + TEST(r, pthread_cond_init(&cond, 0), 0, "%d != %d"); + TEST(r, pthread_mutex_lock(&mtx), 0, "%d != %d"); + TEST(r, pthread_create(&td, 0, start7, (void *[]){ &cond, &mtx }), 0, "%d != %d"); + TEST(r, pthread_cond_wait(&cond, &mtx), 0, "%d != %d"); + TEST(r, pthread_join(td, &res), 0, "%d != %d"); + TEST(r, pthread_mutex_unlock(&mtx), 0, "%d != %d"); + TEST(r, pthread_mutex_destroy(&mtx), 0, "%d != %d"); + TEST(r, pthread_cond_destroy(&cond), 0, "%d != %d"); + return err; } -- cgit v1.2.1