On Mon, February 28, 2005 8:14 am, Csaba Henk said: > On 2005-02-27, ES <ruby-ml / magical-cat.org> wrote: >> On Sun, February 27, 2005 10:44 am, Csaba Henk said: >> Just answering to this point: there's a trick called the double-checked >> locking pattern that avoids the unnecessary lock. I'm not sure if it helps >> any in your situation: >> >> @@mutex.synchronize {@a ||= [] unless @a} unless @a >> >>> @@mutex.synchronize { @a ||= [] } unless @a >>> @a << foo > > Thanks! > > If you see my solution (which is already in your mail as a quote, just > in the line after the one proposed by you), it's almost the same, just > there is no "unless" in the scope of the mutex. So I kinda figured out > that this is the way to go... Is there any use of that inner "unless"? > I'd guess no... Er, no, I was just being stupid :) Since ||= already checks if @a exists, the pattern is unnecessary in most cases; however, being ||= may not be atomic, perhaps to better convey my idea I should have written: @@mutex.synchronize {@a = [] unless @a} unless @a > Regards, > Csaba E