Кажется, даже разработчики программного обеспечения гуру ошибочно полагают, что такое блокировка.
Необходимо различать атомарные операции и блокировки. Атомарные операции, такие как сравнение и своп, выполняют операцию (которая в противном случае потребовала бы двух или более инструкций) как одну непрерывную инструкцию. Блокировки строятся из атомарных операций, однако они могут привести к тому, что потоки будут заняты или ожидают, пока блокировка не будет разблокирована.
В большинстве случаев, если вам удастся реализовать параллельный алгоритм с атомарными операциями, не прибегая к блокировке, вы обнаружите, что он будет на несколько порядков быстрее. Вот почему так сильно интересуются алгоритмы без ожидания и без блокировки.
Было проведено множество исследований по внедрению различных структур данных без ожидания. В то время как код имеет тенденцию быть коротким, им может быть трудно доказать, что они действительно работают из-за возникающих тонких условий гонки. Отладка тоже кошмар. Однако была проделана большая работа, и вы можете найти хэш-карты без ожидания / без блокировки, очереди (очередь без блокировки Майкла Скотта), стеки, списки, деревья, список можно продолжать. Если вам повезет, вы также найдете несколько реализаций с открытым исходным кодом.
Просто гуглите «free-free-my-data-Structure» без блокировки и посмотрите, что вы получите.
Для дальнейшего чтения по этому интересному предмету начните с Искусство многопроцессорного программирования Мориса Херлихи.