Это тот факт, что он вызывает команду LOCK # на уровне ассемблера?
Нет, поскольку это не всегда происходит.
Является ли тот факт, что получение блокировки требует вызова ядра в ОС?
Нет, поскольку обычно это не делается.
На самом деле блокировкиочень, очень недорого.Это утверждение это дорого.Если вам нужно выбрать между блокировкой и конфликтом, в большинстве случаев блокировка является лучшим вариантом.
Блокировки, при правильном использовании, являются механизмом конфликта избегания .Они автоматически находят потоки, которые конкурируют, и планируют их так, что один из них запускается в основном с потоками, которые не конкурируют одновременно.
Например: скажем, у вас есть четыре потока, которые готовы к работе, A, B , C и D .Скажем, A и B соревнуются друг с другом (скажем, они манипулируют одной и той же коллекцией).И, скажем, C и D конкурируют друг с другом, но A не борется с C .Если A и B работают одновременно (состязание), блокировки приведут к тому, что один из них не будет готов к работе, планировщик затем запланирует C (или D ), и два потока будут работать без дальнейшего конфликта.(По крайней мере, до следующего переключения контекста.)
Обычно, когда люди говорят, что «блокировки - это дорого», это означает, что конфликты стоят дорого.К сожалению, формулируя это так, как они это делают, они часто побуждают людей минимизировать блокировки, но усиливают раздоры в процессе.Это проигрышное предложение в подавляющем большинстве случаев.(Есть несколько исключений.)