1 ;;;; -*- indent-tabs-mode: nil -*-
4 Copyright
2006, 2007 Greg Pfeil
6 Distributed under the MIT license
(see LICENSE file
)
9 (in-package #:bordeaux-threads
)
11 ;;; This file provides a portable implementation of condition
12 ;;; variables (given a working WITH-LOCK-HELD and THREAD-YIELD), and
13 ;;; should be used if there is no condition variable implementation in
16 (defstruct condition-var
21 (defun condition-wait (condition-variable lock
&key timeout
)
22 (signal-error-if-condition-wait-timeout timeout
)
23 (check-type condition-variable condition-var
)
24 (setf (condition-var-active condition-variable
) nil
)
27 ((when (condition-var-active condition-variable
)
33 (define-condition-wait-compiler-macro)
35 (defun condition-notify (condition-variable)
36 (check-type condition-variable condition-var
)
37 (with-lock-held ((condition-var-lock condition-variable
))
38 (setf (condition-var-active condition-variable
) t
)))