pthread1.cc: Use one condition variable per predicate instead of tricky use of one...
authorLoren J. Rittle <ljrittle@acm.org>
Sat, 26 Jan 2002 03:26:14 +0000 (03:26 +0000)
committerLoren J. Rittle <ljrittle@gcc.gnu.org>
Sat, 26 Jan 2002 03:26:14 +0000 (03:26 +0000)
        * testsuite/thread/pthread1.cc: Use one condition variable
        per predicate instead of tricky use of one condition variable.

From-SVN: r49239

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/thread/pthread1.cc

index 47e43bdbf473e0bbd864c98a76f95ef92030a217..3370daeff9f6682431fb1750c001ac4e2d131cb3 100644 (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
index b8f522655cccc6b10d3201502635f312ddabfc77..71afefcc758ef7f83f95d52dca0c9dab8cd6aa88 100644 (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;