I've found that FMultiReaderSingleWriterGT has at least 2 bugs:
The one that caused a deadlock in our game and caused me to investigate was this:
This is deadlocked because ReadCounter is 0, but Action is left set as ReadingAction when the game thread releases the lock. Removing the IsInGameThread() guards in LockRead() and UnlockRead() would fix this.
I also noticed there is also a more standard problem that occurs with these kinds of lock, that the control data isn't guarded, so you can get two threads modifying the lock in this pattern:
Result: Thread 2 is reading, but lock is set to NoAction.
There's no existing public thread on this issue, so head over toAnswerHub just mention UE-30929 in the post.