5.1-RELEASE TODO

John Baldwin jhb at FreeBSD.org
Thu May 22 10:00:31 PDT 2003


On 22-May-2003 Terry Lambert wrote:
> John Baldwin wrote:
>> On 22-May-2003 Terry Lambert wrote:
>> > You don't care if another CPU re-does the work, so long as it
>> > re-does it atomically.  That makes it thread safe without the
>> > introduction of locks.
>> 
>> We aren't talking about re-doing the work, we're talking about one
>> CPU trying to walk the list while it's an inconsistent state and
>> walking off into the weeds through a stale pointer.  I.e, CPU 0
>> removes an item from the list while CPU 1 is walking over that item.
>> Duh.
> 
> A singly linked list can be maintained in a consistent state
> at all times, so long as pointer updates are atomic to a CPU.
> 
> As I said before, this is an order of operation problem, not
> a locking problem.

For a single linked-list, yes.  For doubly-linked lists (which is what
I primarily had in mind since most structures I've worked with use
LIST and TAILQ rather than SLIST or STAILQ) it is a different matter.

>> > Just because your friend jumped off a cliff...
>> 
>> So what is your magic solution for making rtld thread-safe when
>> looking up unresolved symbols on first reference?
> 
> Change the order of operation.  Basic database theory:
> 
>       o       write new record
>       o       atomically update index to point from old
>               record to new record
>       o       remove old record
> 
> No matter how many time you reenter this, you end up with a
> consistent view.

Have you brought this up on the threads@ list?  Assuming symbol
lookup is indeed this simple, then I agree that this algorithm
seems sound to me.

-- 

John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/


More information about the freebsd-current mailing list