Класс .Net System.Threading.Interlocked в первую очередь предназначен для предоставления функций префикса ASM LOCK.
Нет, в первую очередь он предназначен для предоставления элементарных операций над переменными, включая барьеры памяти.
Из документации:
Методы этого класса помогают защитить от ошибок, которые могут возникнуть, когда планировщик переключает контексты, когда поток обновляет переменную, к которой могут обращаться другие потоки, или когда два потока одновременно выполняются на отдельных процессорах. Члены этого класса не генерируют исключения.
Теперь так получается, что инструкция LOCK также предлагает эти возможности, но нет явной попытки имитировать всю функциональность инструкции LOCK. Если бы это было намерением, не думаете ли вы, что инструкция была бы упомянута?
Я подозреваю , что разработчики API решили, что они предложат наиболее часто требуемые атомарные операции - вместо того, чтобы взглянуть на инструкцию LOCK и решить, что пропустить.
Подобно языковым функциям, функции API связаны с определенными затратами, и каждая из них должна заработать свое место. Interlocked
- довольно редко используемый класс в любом случае - я подозреваю, что число разработчиков, требующих Interlocked.Or
, будет действительно очень маленьким.
Также помните, что .NET работает не только на x86. Я понятия не имею, имеют ли инструкции в процессорах Windows Phone 7 (которые я предполагаю ARM) те же возможности, что и инструкция LOCK x86, например.