cyclone/examples/long-running-process.scm
2017-11-13 18:41:10 -05:00

28 lines
664 B
Scheme

(import (scheme base)
(scheme eval)
(scheme write)
(scheme cyclone transforms)
(srfi 18))
(let loop ((i 0))
(expand
'((define (consumer)
(let loop ((x 1))
;(write (list (null? *queue*) *queue*))
(define sleep? #f)
(mutex-lock! *lock*)
(cond
((not (null? *queue*))
(write (car *queue*))
(set! *queue* (cdr *queue*)))
(else
(write "consumer sleeping")
(set! sleep? #t)))
(mutex-unlock! *lock*)
(if sleep? (thread-sleep! 1))
(loop))))
'())
(write `(,i))
(thread-sleep! 0.005)
(loop (+ i 1)))