[plt-scheme] The concurrency package in SICP

From: Danny Yoo (dyoo at hkn.eecs.berkeley.edu)
Date: Sat Dec 30 14:06:50 EST 2006

On Sat, 30 Dec 2006, Joshua Ewulo wrote:

> To who ever can help: I am currently in section 3.4 (Concurrency: Time 
> is of the Essence) section of Structure and Interpretation of Computer 
> Programs and I would like to know what package to download in order to 
> work on the exercises in this section.

Hi Joshua,

Since PLT Scheme has a thread system, we can take advantage of its 
primitives.  You might find:


helpful.  To implement MAKE-SERIALIZER, we can use the semaphore 

Here's one possible implementation of those functions:

(module concurrency mzscheme
   (provide parallel-execute

   (define (parallel-execute . thunks)
     (for-each thread thunks))

   (define (make-serializer)
     (let ([mutex (make-semaphore 1)])
       (lambda (thunk)
         (call-with-semaphore mutex thunk)))))

Unfortunately, the granularity for a thread's context switch is a bit 
large, so you might not see the interplay that you'd like using native 
threads.  According to the message thread above, you might be able to use 
engines to get finer control over context switching, and Jens Axel 
Soegaard has a nice implementation here:


It might not be too bad to take his work and adapt it to provide the 
PARALLEL-EXECUTE and MAKE-SERIALIZER primitives you'll want.

Posted on the users mailing list.