[project @ 2004-02-26 16:19:32 by simonmar]
[ghc-hetmet.git] / ghc / rts / Schedule.c
index 213c12a..5ca5666 100644 (file)
@@ -1,5 +1,5 @@
 /* ---------------------------------------------------------------------------
- * $Id: Schedule.c,v 1.185 2004/02/25 17:35:44 simonmar Exp $
+ * $Id: Schedule.c,v 1.188 2004/02/26 16:19:32 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2003
  *
@@ -224,12 +224,6 @@ static void     detectBlackHoles  ( void );
 Mutex     sched_mutex       = INIT_MUTEX_VAR;
 Mutex     term_mutex        = INIT_MUTEX_VAR;
 
-/*
- * A heavyweight solution to the problem of protecting
- * the thread_id from concurrent update.
- */
-Mutex     thread_id_mutex   = INIT_MUTEX_VAR;
-
 #endif /* RTS_SUPPORTS_THREADS */
 
 #if defined(PAR)
@@ -1761,14 +1755,7 @@ createThread(nat size)
   // Always start with the compiled code evaluator
   tso->what_next = ThreadRunGHC;
 
-  /* tso->id needs to be unique.  For now we use a heavyweight mutex to
-   * protect the increment operation on next_thread_id.
-   * In future, we could use an atomic increment instead.
-   */
-  ACQUIRE_LOCK(&thread_id_mutex);
   tso->id = next_thread_id++; 
-  RELEASE_LOCK(&thread_id_mutex);
-
   tso->why_blocked  = NotBlocked;
   tso->blocked_exceptions = NULL;
 
@@ -1986,7 +1973,9 @@ void scheduleThread(StgTSO* tso)
   RELEASE_LOCK(&sched_mutex);
 }
 
-static Condition bound_cond_cache = NULL;
+#if defined(RTS_SUPPORTS_THREADS)
+static Condition *bound_cond_cache = NULL;
+#endif
 
 SchedulerStatus
 scheduleWaitThread(StgTSO* tso, /*[out]*/HaskellObj* ret,
@@ -2004,7 +1993,7 @@ scheduleWaitThread(StgTSO* tso, /*[out]*/HaskellObj* ret,
     // cache one.  This is a pretty feeble hack, but it helps speed up
     // consecutive call-ins quite a bit.
     if (bound_cond_cache != NULL) {
-       m->bound_thread_cond = bound_cond_cache;
+       m->bound_thread_cond = *bound_cond_cache;
        bound_cond_cache = NULL;
     } else {
        initCondition(&m->bound_thread_cond);
@@ -2077,9 +2066,6 @@ initScheduler(void)
    * the scheduler. */
   initMutex(&sched_mutex);
   initMutex(&term_mutex);
-  initMutex(&thread_id_mutex);
-
-  initCondition(&thread_ready_cond);
 #endif
   
 #if defined(RTS_SUPPORTS_THREADS)
@@ -2148,7 +2134,7 @@ waitThread_(StgMainThread* m, Capability *initialCapability)
 #if defined(RTS_SUPPORTS_THREADS)
   // Free the condition variable, returning it to the cache if possible.
   if (bound_cond_cache == NULL) {
-      bound_cond_cache = m->bound_thread_cond;
+      *bound_cond_cache = m->bound_thread_cond;
   } else {
       closeCondition(&m->bound_thread_cond);
   }