diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 16972d8dfe9d12e25f01e0ecbc6f96333be0aba2..d5cb45daecb1ddcc56aa0dfb6990a256af6929dc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2003-05-14 Loren J. Rittle <ljrittle@acm.org> + + * testsuite/thread/pthread4.cc: Tweak test. + 2003-05-13 Benjamin Kosnik <bkoz@redhat.com> * 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 2636a5dd1c7e98b17b27a4a8196c892c3a4fabef..d297fc28e67e46f0e14b64897527c9999e53d3e6 100644 --- a/libstdc++-v3/testsuite/thread/pthread4.cc +++ b/libstdc++-v3/testsuite/thread/pthread4.cc @@ -35,6 +35,8 @@ using namespace std; static list<string> 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); }