Having thought about this during my run this morning, my current position is:
+(mar 2019??)
1/ we have locking primitives, fields which indicate what lock protects them,
and pointers which are typed to say what lock they own.
Locks are generally nreader-xor-1writer and spin or wait on a queue,
- possibly dedicated, possibly chosed by hash.
+ possibly dedicated, possibly chosen by hash.
a refcount is a lock that is mostly in the nreader state.
A 'writer' which frees the object might get queued at object creation.