thread-wtf? pasted by sjamaan on Mon Feb 22 21:17:38 2016

(use srfi-18 posix)

(set-signal-handler!
 signal/alrm (lambda (n) (print "ring ring") (set-alarm! 1)))

(set-alarm! 1)

(thread-start! (lambda ()
                 (let lp ()
                   (print "spinning")
                   (thread-sleep! 0.1)
                   (lp))))

(thread-join!
 (thread-start! (lambda ()
                  (let lp ((ln (read-line)))
                    (unless (eof-object? ln)
                      (print ln)
                      (lp (read-line)))))))

Moar thread wtf? added by sjamaan on Tue Feb 23 20:32:38 2016

;; Leave this running for a minute or two, keep an eye on it
;; Eventually something will cause a stack overflow if run
;; in the interpreter.
(use srfi-18 posix)

(set-signal-handler!
 signal/usr1 (lambda (n) (print "who's there?")))

(let ((pid (process-fork)))
  (unless (zero? pid)
    (let lp ()
      (print "knock, knock")
      (process-signal pid signal/usr1)
      (sleep 1)
      (lp))))

(define outer-mutex (make-mutex 'outer-mutex))
(define inner-mutex (make-mutex 'inner-mutex))

(define spinner
  (thread-start! (lambda ()
                   (mutex-lock! inner-mutex)
                   (mutex-unlock! outer-mutex) ; signal ready
                   (let lp ()
                     (print "spinning")
                     (thread-sleep! 0.1)
                     (lp)))))

(mutex-lock! outer-mutex 0 spinner)
(mutex-lock! outer-mutex) ; now wait till spinner is ready

(define reader
  (thread-start! (lambda ()
                   (let lp ()
                     (lp)))))

(mutex-lock! inner-mutex)
(print "ERROR!  Should never be unlocked")
(exit 1)