Принципы объектно-ориентированного программирования

         

Применение блокировок монитора с оператором С# lock



Применение блокировок монитора с оператором С# lock

Оператор С# lock не поддерживает полный набор функций класса Monitor, но все же позволяет получать и освобождать блокировку монитора. Чтобы задействовать оператор lock, укажите его в фигурных скобках вместе с упорядочиваемым кодом. Начальная и конечная точки защищаемого кода указываются фигурными скобками, поэтому нет нужды использовать оператор unlock. Следующий код выдаст такую же синхронизированную информацию, что и в предыдущих примерах:

using System;



using System.Threading;

class Database

{

public void SaveData(string text)

<

lock(this)

{

Console.WriteLine("Database.SaveData - Started");

Console.WriteLine("Database.SaveData - Working"); for (int 1=0; i < 100; i++)

<

Console.Write(text); }

Console.WriteLine("\nDatabase.SaveData - Ended"); } }

}

class ThreadLockApp {

public static Database db = new DatabaseO;

public static void WorkerThreadMethod1() {

Console.WriteLlne("Worker thread #1 - Started");

Console.WrlteLine

("Worker thread #1 - Calling Database.SaveData"); db.SaveData("x");

Console.WriteLlne("Worker thread #1 - Returned from Output");

}

public static void WorkerThreadMethod2() {

Console.WriteLine("Worker thread #2 - Started");

Console.WriteLine

("Worker thread "2 - Calling Database.SaveData"); db.SaveDataC'o");

Console.WriteLine("Worker thread #2 - Returned from Output"); }

public static void Main() {

ThreadStart worker"! = new ThreadStart(WorkerThreadMethodl);

ThreadStart worker2 = new ThreadStart(WorkerThreadMethod2);

Console.WriteLine("Main - Creating worker threads");

Thread t1 = new Thread(workerl); Thread t2 = new Thread(worker2);

t1.Start(); t2.Start(); } }

 

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