[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: assignments and thread safety

ES

3/1/2005 7:27:00 PM

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