[M3devel] FreeSlots/lookup slot locking
hendrik at topoi.pooq.com
hendrik at topoi.pooq.com
Thu Nov 12 15:28:59 CET 2009
On Thu, Nov 12, 2009 at 04:17:12AM +0000, 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.
Just curious: C had "volatile" variables, meaning variables whose
writes and reads cannot be reordered or deleted by an optimiser.
They're intended for things like memory-mapped I/O. Wouldn't they be
the kinds of things we need here? How does the gcc intermediate code
represent them? By memory barriers? Or by some other means?
-- hendrik
>
>
>
> I DO suspect the locking in AssignSlot can be reduced but haven't done so yet.
>
> Maybe it doesn't work out.
>
>
>
> - 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
>
>
>
More information about the M3devel
mailing list