diff options
author | Loren J. Rittle <ljrittle@acm.org> | 2003-05-15 02:24:13 +0000 |
---|---|---|
committer | Loren J. Rittle <ljrittle@gcc.gnu.org> | 2003-05-15 02:24:13 +0000 |
commit | b625fdb7508b5f4e2eac0300e96cd664549d22a2 (patch) | |
tree | a8a5fa0c262ae82bcc8a719502f4c983b9b7f862 /libstdc++-v3/testsuite/thread | |
parent | 3b3acc8107f8038480c486e7c3a26e131f57490d (diff) | |
download | gcc-b625fdb7508b5f4e2eac0300e96cd664549d22a2.zip gcc-b625fdb7508b5f4e2eac0300e96cd664549d22a2.tar.gz gcc-b625fdb7508b5f4e2eac0300e96cd664549d22a2.tar.bz2 |
* testsuite/thread/pthread4.cc: Tweak test.
From-SVN: r66817
Diffstat (limited to 'libstdc++-v3/testsuite/thread')
-rw-r--r-- | libstdc++-v3/testsuite/thread/pthread4.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/libstdc++-v3/testsuite/thread/pthread4.cc b/libstdc++-v3/testsuite/thread/pthread4.cc index 2636a5d..d297fc2 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); } |