tender threading pasted by mario-goulart on Tue Oct 23 20:00:04 2012

(use srfi-18)
(use posix)

(define (produce writer)
  (thread-start!
   (lambda ()
     (let loop ((i 0))
       (display (conc "hello " i "\n") writer)
       (flush-output writer)
       (thread-sleep! 1)
       (loop (+ i 1))))))

(define (consume reader)
  (thread-start!
   (lambda ()
     (let loop ()
       (print (read-line reader))
       (thread-sleep! 1)
       (loop)))))

(define (stream-test in-fd out-fd)
  (let ((reader (open-input-file* in-fd))
        (writer (open-output-file* out-fd)))
    (produce writer)
    (print "producer started")
    (thread-join! (consume reader))))

(define dothis
  (call-with-values create-pipe stream-test))

(dothis)

Using read instead of read-line added by mario-goulart on Tue Oct 23 20:18:38 2012

(use srfi-18)
(use posix)

(define (produce writer)
  (thread-start!
   (lambda ()
     (let loop ((i 0))
       (display (conc "hello" i " ") writer)
       (flush-output writer)
       (loop (+ i 1))))))

(define (consume reader)
  (thread-start!
   (lambda ()
     (let loop ()
       (print (read reader))
       (loop)))))

(define (stream-test in-fd out-fd)
  (let ((reader (open-input-file* in-fd))
        (writer (open-output-file* out-fd)))
    (produce writer)
    (print "producer started")
    (thread-join! (consume reader))))

(define dothis
  (call-with-values create-pipe stream-test))

(dothis)