[M3devel] FreeSlots/lookup slot locking

Tony Hosking hosking at cs.purdue.edu
Wed Nov 11 15:23:59 CET 2009


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/20091111/387edd82/attachment-0002.html>


More information about the M3devel mailing list