;; This code has a race condition. When run in csi, it prints some ;; number less than 20000. But when compiled, it always prints 20000. ;; ;; What causes the race condition to disappear when compiled? (cond-expand (chicken-4 (use srfi-18)) (else (import (srfi 18)))) (define iterations 10000) (define x 0) (define (make-counter) (lambda () (do ((i 0 (add1 i))) ((= i iterations)) (set! x (add1 x))))) (define thread1 (thread-start! (make-counter))) (define thread2 (thread-start! (make-counter))) (thread-join! thread1) (thread-join! thread2) (print x)