- parallel-execute p1 p2 ...procedure
Each argument must be a procedure of no arguments. parallel-execute creates a separate process for each argument, and that process applies the argument to no arguments. These processes all run concurrently.
See SICP Section 3.4.2, Subsection "Serializers in Scheme".
(import (srfi 216)) (define x 10) (parallel-execute (lambda () (set! x (* x x))) ; P1 (lambda () (set! x (+ x 1)))) ; P2 ;; May assign to x any of the following: ;; 101 - P1 sets x to 100 and then P2 increments x to 101. ;; 121 - P2 increments x to 11 and then P1 sets x to x * x. ;; 110 - P2 changes x from 10 to 11 between the two times that P1 accesses the value of x during the evaluation of (* x x). ;; 11 - P2 accesses x, then P1 sets x to 100, then P2 sets x. ;; 100 - P1 accesses x (twice), then P2 sets x to 11, then P 1 sets x.