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/