Igniters, We have two pretty strange constructs: GridSpinReadWriteLock and base on it GridSpinBusyLock. As I understand it was an effort to create more performant RWLock than ReentrantReadWriteLock for cases when wrtie locks are very unlikely.
As busy lock concept is also used in some sensitive places of "platforms" module, I measured performance of read lock-unlock cycles for both ReentrantReadWriteLock and GridSpinReadWriteLock using JMH. Our implementation doesn't offer any perform benefits comparing to ReentrantReadWriteLock, their performance are almost equal. This makes sense, because essentailly both locks just CASes on a shared variable to obtain the read lock. Looks like we can safely remove these "spinners" and use ReentrantReadWriteLock instead. More serious perfomance gain can be achieved if we stripe the lock (e.g. like it is done in LongAdder) thus decreasing contention on shared variables. Quick experiments shown 5x throughput increase for read lock-unlock cycles when lock is striped. Thoughts? Vladimir.