cyclone/examples/threading/thread-join.scm
2017-11-13 18:41:10 -05:00

42 lines
1 KiB
Scheme

;;;; A simple example of using a condition variable to simulate thread-join
(import (scheme base)
(scheme read)
(scheme write)
(srfi 18))
(define cv (make-condition-variable))
(define m (make-mutex))
;; Thread - Do something, then let main thread know when we are done
(thread-start!
(make-thread
(lambda ()
(display "started thread")
(newline)
(thread-sleep! 3)
(display "thread done")
(newline)
(condition-variable-broadcast! cv))))
;; Main thread - wait for thread to broadcast it is done
(mutex-lock! m)
(mutex-unlock! m cv) ;; Wait on cv
(display "main thread done")
(newline)
(thread-sleep! 0.5)
;(display "thread join")
;(newline)
;(let ((t (make-thread
; (lambda ()
; (display "started second thread")
; (newline)
; (thread-sleep! 3)
; (display "thread done")
; (newline)
; 1))))
; (thread-start! t)
; (thread-sleep! 0)
; (display (thread-join! t))
; (display "main thread done again")
; (newline))