mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-04 19:56:34 +02:00
Updated to use ->heap
This commit is contained in:
parent
ea45546c62
commit
90ca75ca9c
1 changed files with 12 additions and 8 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue