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