Allow me to call out some layout comparison points against the 2014 version:
-
There is no separate member to track the shared reader count.
-
The four-byte spinlock is gone.
-
The four-byte waiting writer count is gone.
-
The two chunks of four-byte padding (for qword alignment of pointers) are gone.
-
The WaitListEntry structure hasn’t changed at all.
Ewald also covers Compare-And-Swap operations in detail. Definitely a good read.