pthread1.cc: Use one condition variable per predicate instead of tricky use of one condition...

* testsuite/thread/pthread1.cc: Use one condition variable
        per predicate instead of tricky use of one condition variable.

From-SVN: r49239
This commit is contained in:
Loren J. Rittle 2002-01-26 03:26:14 +00:00 committed by Loren J. Rittle
parent 33c7f925c6
commit 63b3a44f03
2 changed files with 15 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2002-01-25 Loren Rittle <ljrittle@acm.org>
* testsuite/thread/pthread1.cc: Use one condition variable
per predicate instead of tricky use of one condition variable.
2002-01-25 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/fstream.tcc (filebuf::close()): Fix close for input

View File

@ -48,19 +48,19 @@ public:
task_queue ()
{
pthread_mutex_init (&fooLock, NULL);
pthread_cond_init (&fooCond, NULL);
pthread_cond_init (&fooCond1, NULL);
pthread_cond_init (&fooCond2, NULL);
}
~task_queue ()
{
pthread_mutex_destroy (&fooLock);
pthread_cond_destroy (&fooCond);
pthread_cond_destroy (&fooCond1);
pthread_cond_destroy (&fooCond2);
}
list<int> foo;
pthread_mutex_t fooLock;
// This code uses a special case that allows us to use just one
// condition variable - in general, don't use this idiom unless you
// know what you are doing. ;-)
pthread_cond_t fooCond;
pthread_cond_t fooCond1;
pthread_cond_t fooCond2;
};
void*
@ -72,9 +72,9 @@ produce (void* t)
{
pthread_mutex_lock (&tq.fooLock);
while (tq.foo.size () >= max_size)
pthread_cond_wait (&tq.fooCond, &tq.fooLock);
pthread_cond_wait (&tq.fooCond1, &tq.fooLock);
tq.foo.push_back (num++);
pthread_cond_signal (&tq.fooCond);
pthread_cond_signal (&tq.fooCond2);
pthread_mutex_unlock (&tq.fooLock);
}
return 0;
@ -89,11 +89,11 @@ consume (void* t)
{
pthread_mutex_lock (&tq.fooLock);
while (tq.foo.size () == 0)
pthread_cond_wait (&tq.fooCond, &tq.fooLock);
pthread_cond_wait (&tq.fooCond2, &tq.fooLock);
if (tq.foo.front () != num++)
abort ();
tq.foo.pop_front ();
pthread_cond_signal (&tq.fooCond);
pthread_cond_signal (&tq.fooCond1);
pthread_mutex_unlock (&tq.fooLock);
}
return 0;