On 06.06.2010 07:29, Suraj Kurapati wrote:
> Hi,
> 
> I am concerned about the lack of mutual exlusion in code listing
> 14.2 "Chat server using TCPServer and threads" on page 430 in "The
> Well-Grounded Rubyist" book.  That code goes something like this:
> 
>   chatters = []
> 
>   while ...
>     Thread.new(...) do |c|
>       chatters.each { ... }
>       chatters.push c
>       chatters.each { ... }
>       chatters.delete c
>       chatters.each { ... }
>     end
>   end
> 
> Multiple threads are spawned and each of them accesses the shared
> resource (the chatters array) directly without mutual exclusion.
> 
> What happens when a thread inside chatters.each() gets descheduled
> and another thread proceeds to add or delete an object to chatters?
> 
> Shouldn't there be a Mutex#synchronize call wrapping all access to
> the chatters array?

 From what I see in your posting: yes.

Kind regards

	robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/