From: Loren J. Rittle Date: Thu, 15 May 2003 02:24:13 +0000 (+0000) Subject: * testsuite/thread/pthread4.cc: Tweak test. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b625fdb7508b5f4e2eac0300e96cd664549d22a2;p=gcc.git * testsuite/thread/pthread4.cc: Tweak test. From-SVN: r66817 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 16972d8dfe9..d5cb45daecb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2003-05-14 Loren J. Rittle + + * testsuite/thread/pthread4.cc: Tweak test. + 2003-05-13 Benjamin Kosnik * testsuite/27_io/ios_base/cons/copy_neg.cc: Remove diff --git a/libstdc++-v3/testsuite/thread/pthread4.cc b/libstdc++-v3/testsuite/thread/pthread4.cc index 2636a5dd1c7..d297fc28e67 100644 --- a/libstdc++-v3/testsuite/thread/pthread4.cc +++ b/libstdc++-v3/testsuite/thread/pthread4.cc @@ -35,6 +35,8 @@ using namespace std; static list foo; static pthread_mutex_t fooLock = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t fooCondOverflow = PTHREAD_COND_INITIALIZER; +static pthread_cond_t fooCondUnderflow = PTHREAD_COND_INITIALIZER; static unsigned max_size = 10; #if defined(__CYGWIN__) static int iters = 10000; @@ -50,11 +52,12 @@ produce (void*) string str ("test string"); pthread_mutex_lock (&fooLock); - if (foo.size () < max_size) - { - foo.push_back (str); - num++; - } + while (foo.size () >= max_size) + pthread_cond_wait (&fooCondOverflow, &fooLock); + foo.push_back (str); + num++; + if (foo.size () >= (max_size / 2)) + pthread_cond_signal (&fooCondUnderflow); pthread_mutex_unlock (&fooLock); } @@ -67,12 +70,15 @@ consume (void*) for (int num = 0; num < iters; ) { pthread_mutex_lock (&fooLock); + while (foo.size () == 0) + pthread_cond_wait (&fooCondUnderflow, &fooLock); while (foo.size () > 0) { string str = foo.back (); foo.pop_back (); num++; } + pthread_cond_signal (&fooCondOverflow); pthread_mutex_unlock (&fooLock); }