[gambit-list] Deadlock problem

Marc Feeley feeley at iro.umontreal.ca
Wed Aug 10 18:56:05 EDT 2005


On 9-Aug-05, at 2:55 PM, Matthew Morgan wrote:

> I can't figure out why this deadlocks on me (I'm using beta 14):
>
> (let ((x (open-vector)))
>   (thread-start! (make-thread (lambda () (write 1 x))))
>   (thread-start! (make-thread (lambda () (write 2 x))))
>   (read x)
>   (read x))
> *** ERROR IN ##thread-deadlock-action! -- Deadlock detected
>
> Shouldn't this run to completion (possibly blocking at times to wait
> for the writes), and return either 2 or 1?
>

I/O is buffered, so you need to force the output to be sent to the  
vector-port (and available to be read).  This is what you should do:

(let ((x (open-vector)))
   (thread-start! (make-thread (lambda () (write 1 x) (force-output  
x))))
   (thread-start! (make-thread (lambda () (write 2 x) (force-output  
x))))
   (read x)
   (read x))

Marc



More information about the Gambit-list mailing list