1.0.37.33: Add SB-THREAD:GRAB-MUTEX.
[sbcl.git] / src / code / thread.lisp
index a44b763..7a2e567 100644 (file)
 
 (in-package "SB!THREAD")
 
+(def!type thread-name ()
+  'simple-string)
+
+(def!struct (thread (:constructor %make-thread))
+  #!+sb-doc
+  "Thread type. Do not rely on threads being structs as it may change
+in future versions."
+  (name          nil :type (or thread-name null))
+  (%alive-p      nil :type boolean)
+  (os-thread     nil :type (or integer null))
+  (interruptions nil :type list)
+  (result        nil :type list)
+  (interruptions-lock
+   (make-mutex :name "thread interruptions lock")
+   :type mutex)
+  (result-lock
+   (make-mutex :name "thread result lock")
+   :type mutex))
+
 (def!struct mutex
   #!+sb-doc
   "Mutex type."
-  (name nil :type (or null simple-string))
+  (name   nil :type (or null thread-name))
   (%owner nil :type (or null thread))
   #!+(and (not sb-lutex) sb-thread)
-  (state 0 :type fixnum)
+  (state    0 :type fixnum)
   #!+(and sb-lutex sb-thread)
   (lutex (make-lutex)))
 
@@ -48,15 +67,15 @@ stale value, use MUTEX-OWNER instead."
 (def!struct spinlock
   #!+sb-doc
   "Spinlock type."
-  (name nil :type (or null simple-string))
+  (name  nil :type (or null thread-name))
   (value nil))
 
 (sb!xc:defmacro with-mutex ((mutex &key (value '*current-thread*) (wait-p t))
                             &body body)
   #!+sb-doc
-  "Acquire MUTEX for the dynamic scope of BODY, setting it to
-NEW-VALUE or some suitable default value if NIL.  If WAIT-P is non-NIL
-and the mutex is in use, sleep until it is available"
+  "Acquire MUTEX for the dynamic scope of BODY, setting it to VALUE or
+some suitable default value if NIL.  If WAIT-P is non-NIL and the mutex
+is in use, sleep until it is available"
   `(dx-flet ((with-mutex-thunk () ,@body))
      (call-with-mutex
       #'with-mutex-thunk