Использование областей синхронизации
Следующим способом синхронизации является использование ключевого слова lock. Его использует класс Monitor из пространства имен System.Threading для блокировки области кода. Это ключевое слово может применяться и в статических методах. Оно имеет следующий синтаксис:
lock(объект) блок выражений.
Пример использования ключевого слова lock:
public void Function() { System.Object lockThis = new System.Object(); lock(lockThis) { // Код, который нуждается в эксклюзивных правах } }
В процессе компиляции приложения среда заменяет выражение lock на блок try, finally:
SomeClass x = new SomeClass(); lock(x) { // Выполнение действий. DoSomething(); }
// Эквивалентный код:
SomeClass x = new SomeClass(); System.Object obj = (System.Object)x; System.Threading.Monitor.Enter(obj); try { // Выполнение действий. DoSomething(); } finally { System.Threading.Monitor.Exit(obj); }
В статических методах lock можно включать прямо внутри свойств:
using System; using System.Threading;
class Cache { public static void Add(object x) { // Код, который не нуждается в эксклюзивных правах lock (typeof(Cache)) { // Код, который нуждается в эксклюзивных правах } // Код, который не нуждается в эксклюзивных правах } }