Недавно я читал об Compare and Swap атомарном действии (CMPXCHG,.NET Interlocked.CompareExchange, что угодно).
Я понимаю, как он работает внутри, и как он используется от клиента.
Что я не могу понять, когда кто-то использует CAS?
Википедия говорит:
CAS используется для реализации примитивов синхронизации, таких как семафоров и мьютексов, а также более сложные блокировки и безжизненные алгоритмы.
Итак, может ли кто-нибудь дать мне более общий реальный прецедент с кодом и описанием использования CAS?
Этот вопрос предназначен для языковой агностики, поэтому любой язык будет делать (желательно сборка на основе C или x86).
Спасибо!