[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