как то так вышло :) валидно?
А я бы взял read, попытался найти элемент, если его нет - write (предварительно прибив читателя), потом ещё одну проверку на отсутствие элемента, а потом вставка. Локов на чтение может быть сколько угодно, а вот лок на запись лочит и запись, и чтение (и ждёт, пока читатели не сдохнут).
Так что брать write прям сразу может быть не очень оптимально по производительности.