From fb8198b2d0f52573db00e8a7ef60cb42f6e3c65a Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Thu, 17 Mar 2011 07:39:00 +0000 Subject: [PATCH] Replaced busy-waiting by waiting on a condition variable. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11646 --- drd/tests/pth_detached.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/drd/tests/pth_detached.c b/drd/tests/pth_detached.c index 696cd4b59a..b41a39f00d 100644 --- a/drd/tests/pth_detached.c +++ b/drd/tests/pth_detached.c @@ -1,33 +1,23 @@ /* Test whether detached threads are handled properly. */ - #include #include #include #include #include - static int s_finished_count; static pthread_mutex_t s_mutex; - +static pthread_cond_t s_cond; static void increment_finished_count() { pthread_mutex_lock(&s_mutex); s_finished_count++; + pthread_cond_signal(&s_cond); pthread_mutex_unlock(&s_mutex); } -static int get_finished_count() -{ - int result; - pthread_mutex_lock(&s_mutex); - result = s_finished_count; - pthread_mutex_unlock(&s_mutex); - return result; -} - static void* thread_func1(void* arg) { write(STDOUT_FILENO, ".", 1); @@ -56,6 +46,7 @@ int main(int argc, char** argv) thread_arg[i] = i; pthread_mutex_init(&s_mutex, 0); + pthread_cond_init(&s_cond, 0); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); @@ -81,17 +72,18 @@ int main(int argc, char** argv) pthread_attr_destroy(&attr); // Wait until all detached threads have written their output to stdout. - while (get_finished_count() < count1 + count2) - { - struct timespec delay = { 0, 1 * 1000 * 1000 }; - nanosleep(&delay, 0); - } - - write(STDOUT_FILENO, "\n", 1); + pthread_mutex_lock(&s_mutex); + while (s_finished_count < count1 + count2 + && pthread_cond_wait(&s_cond, &s_mutex) == 0) + ; + pthread_mutex_unlock(&s_mutex); + pthread_cond_destroy(&s_cond); pthread_mutex_destroy(&s_mutex); sleep(1); + write(STDOUT_FILENO, "\n", 1); + return 0; } -- 2.47.2