[M3devel] FreeSlots/lookup slot locking
Jay K
jay.krell at cornell.edu
Thu Nov 12 05:17:12 CET 2009
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.
- 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/e8547670/attachment-0002.html>
More information about the M3devel
mailing list