Создание Windows-приложений на основе Visual C#

         

Использование областей синхронизации


Следующим способом синхронизации является использование ключевого слова 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)) { // Код, который нуждается в эксклюзивных правах } // Код, который не нуждается в эксклюзивных правах } }



Содержание раздела