Пока не могу понять преимущество (а вообще говоря и возможность) использования SRWLOCK (Vista/Windows2008) в большинстве задач FIFO/LIFO (queue/list/stack/cyclic buffer и т.д.). Сложность в понимании в том, что в большинстве указанных задач, reader так или иначе изменяет состояние контейнера (pop.front для/change tail и т.д.). Это не возможно сделать только на AcquireSRWLockShared, но на AcquireSRWLockExclusive. Пример CQueue, из новой книжки Рихтера "Windows via C/C++, Fifth Edition" также вызывает сомнение, поскольку reader изменяет элемент CQueue.
Согласен, что SRWLOCK возможно даст перформанс в задачах где несколько читателейтолькочитают данные из контейнера, но это слабое утешение, поскольку крайне сужает круг практических задач.
Какие будут мнения? Как-так построить, скажем, queue, чтобы reader не менял состояние очереди?