Updated to use ->heap

This commit is contained in:
Justin Ethier 2016-01-15 22:58:59 -05:00
parent ea45546c62
commit 90ca75ca9c

View file

@ -12,20 +12,22 @@
(define *lock* (make-mutex)) (define *lock* (make-mutex))
(define *queue* (list)) (define *queue* (->heap (list)))
(define (producer) (define (producer)
(let loop ((n 10)) (let loop ((n 10))
(cond (cond
((> n 0) ((> n 0)
(mutex-lock! *lock*) (mutex-lock! *lock*)
(set! *queue* (cons n *queue*)) (set! *queue* (->heap (cons (->heap n) *queue*)))
(mutex-unlock! *lock*) (mutex-unlock! *lock*)
(loop (- n 1)))))) (loop (- n 1)))
(else
(write "producer thread done")))))
(define (consumer) (define (consumer)
(let loop () (let loop ()
(write (list (null? *queue*) *queue*)) ;(write (list (null? *queue*) *queue*))
(define sleep? #f) (define sleep? #f)
(mutex-lock! *lock*)` (mutex-lock! *lock*)`
(cond (cond
@ -33,12 +35,14 @@
(write (car *queue*)) (write (car *queue*))
(set! *queue* (cdr *queue*))) (set! *queue* (cdr *queue*)))
(else (else
(write "consumer sleeping")
(set! sleep? #t))) (set! sleep? #t)))
(mutex-unlock! *lock*) (mutex-unlock! *lock*)
(if sleep? (thread-sleep! 1000)) (if sleep? (thread-sleep! 1000))
(loop))) ; (loop)
))
(thread-start! (make-thread producer)) ;(thread-start! (make-thread producer))
(producer) ;(producer)
(consumer) (consumer)
;(read)