[M3devel] FreeSlots/lookup slot locking

Tony Hosking hosking at cs.purdue.edu
Thu Nov 12 15:42:21 CET 2009


The critical section should take care of the memory visibility (CS  
includes a membar) so long as all accesses to slot occur only in the CS.

On 11 Nov 2009, at 23:17, Jay K wrote:

> I do currently still use the critical section "throughout 'all' of  
> AssignSlot".
> The memory barrier doesn't replace it there. Just makes it carefully  
> ordered so other readers see things reasonably well.
>
> I DO suspect the locking in AssignSlot can be reduced but haven't  
> done so yet.
> Maybe it doesn't work out.

I'm skeptical, because of the need to atomically update all the slots  
from the old array.  You need to guarantee no update occurs between  
copying to the new array and installing the new array.

>
>  - Jay
>
>
> From: hosking at cs.purdue.edu
> To: jay.krell at cornell.edu
> Date: Wed, 11 Nov 2009 09:23:59 -0500
> CC: m3devel at elegosoft.com
> Subject: Re: [M3devel] FreeSlots/lookup slot locking
>
> It's not the allocation I worry about.
> How do you avoid two threads getting the same slot?
>
> On 11 Nov 2009, at 01:11, Jay K wrote:
>
> Tony:
>
> > Also, I am unconvinced that the current implementation of  
> AssignSlot can ever
> > be correct without the critical section. It requires atomic update  
> of both
> > the slots array pointer (with the new slots) *and* the array  
> elements. This
> > requires a proper CS instead of non-blocking synchronization.
>
>
> I don't see it.
> I could be wrong.
>
> The writes are done within a critical section, to avoid racing with  
> other writers.
>
> Writes interact with readers in that:
>
>             SUBARRAY (new_slots^, 0, n) := slots^;
> finish writing to the array elements
> MemoryBarrier
>             slots := new_slots;
>
>
> so readers don't see slots unless it has been fully initialized.
>
> AssignSlots should also be able to be lock free via  
> InterlockedCompareExchangePointer.
>
>
>  - Jay
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20091112/c7109e7e/attachment-0002.html>


More information about the M3devel mailing list