(use miscmacros srfi-1 srfi-18 thread-utils) (define *threads* '()) (define *res* '()) (define (wait-for-all l) (while (any (lambda (t) (not (or (thread-terminated? t) (thread-dead? t)))) l) (thread-yield!))) (define (make-sleeper n) (lambda () (thread-sleep! n) (push! n *res*))) (define (sleep-sort lst) (for-each (lambda (n) (let ((t (make-thread (make-sleeper n)))) (push! t *threads*) (thread-start! t))) lst)) (sleep-sort '(5 4 6 3 1 2)) (wait-for-all *threads*) (display (reverse *res*)) (newline) (exit 0)