More on reader-writer locks

From: Alan Stern
Date: Tue Feb 25 2020 - 16:42:06 EST


On Tue, 25 Feb 2020, Luc Maranget wrote:

> Hi,
>
> As far as I can remember I have implemented atomic_add_unless in herd7.

Luc, have you considered whether we can use atomic_add_unless and
cmpxchg to implement reader-writer locks in the LKMM? I don't think we
can handle them the same way we handle ordinary locks now.

Let's say that a lock variable holds 0 if it is unlocked, -1 if it is
write-locked, and a positive value if it is read-locked (the value is
the number of read locks currently in effect). Then operations like
write_lock, write_trylock, and so on could all be modeled using
variants of atomic_add_unless, atomic_dec, and cmpxchg.

But will that work if the reads-from relation is computed by the cat
code in lock.cat? I suspect it won't.

How would you approach this problem?

Alan