Механизм мнимой блокировки: неблокирующая запись, чтение и аннулирование
Вот сценарий. Боб - писатель, а Алиса - читатель. Боб пишет вещи, а Алиса читает их. Правила таковы:
1) Боб может писать, читает ли Алиса или нет (чтение не блокирует запись).
2) Когда Боб пишет, Алиса не может читать (запись делает чтение блоков).
3) Когда Алиса заканчивает чтение, она может знать, написал ли Боб во время ее чтения (читатели могут определить, являются ли данные, которые они только что прочитали, недействительными).
2) и 3) действительно одно объединенное правило, но я перечислю два для хорошего обсуждения. Проблема может быть решена одним мьютексом и одним счетчиком (номером версии), но я не знаю, является ли вышеприведенный хорошо известный сценарий с широко используемым именем? Было ли проведено какое-либо исследование?
1 ответ
Что я не знаю, так это проблема известного сценария, названная терминами?
Да, он называется Seqlock: https://en.wikipedia.org/wiki/Seqlock
Кто-нибудь учится на этом, или я просто делаю колесо?
AFAIK существует множество реализаций (например, ядра Linux) и статей.