aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/thread
diff options
context:
space:
mode:
authorLoren J. Rittle <ljrittle@acm.org>2003-05-15 02:24:13 +0000
committerLoren J. Rittle <ljrittle@gcc.gnu.org>2003-05-15 02:24:13 +0000
commitb625fdb7508b5f4e2eac0300e96cd664549d22a2 (patch)
treea8a5fa0c262ae82bcc8a719502f4c983b9b7f862 /libstdc++-v3/testsuite/thread
parent3b3acc8107f8038480c486e7c3a26e131f57490d (diff)
downloadgcc-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.cc16
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);
}