This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
NIIBE Yutaka writes:
> I'll show an example later.
Here is small example.
Type (start) to start producer, type (stop) to stop it.
Producer increment current-product-number at priod of one second.
Consumer waits for product, and displays the product number.
Hope this helps,
--
NIIBE Yutaka
==========================
(define mutex (make-mutex))
(define new-product (make-condition-variable))
(define control (make-condition-variable))
(define stop-flag #t)
(define current-product-number 0)
(define procecced-product-number 0)
(define (start)
(lock-mutex mutex)
(set! stop-flag #f)
(signal-condition-variable control)
(unlock-mutex mutex))
(define (stop)
(lock-mutex mutex)
(set! stop-flag #t)
(unlock-mutex mutex))
(define (producer)
(let loop ()
(begin
(lock-mutex mutex)
(if stop-flag
(wait-condition-variable control mutex))
(set! current-product-number (1+ current-product-number))
(signal-condition-variable new-product)
(unlock-mutex mutex)
(select () () () 0 1000000)
(loop))))
(define (consumer)
(let loop ()
(begin
(lock-mutex mutex)
(if (< procecced-product-number current-product-number)
(begin
(set! procecced-product-number (1+ procecced-product-number))
(display procecced-product-number)
(newline))
(wait-condition-variable new-product mutex))
(unlock-mutex mutex)
(loop))))
(begin-thread
(producer))
(begin-thread
(consumer))
==========================