Поиск

Применение блокировок монитора с оператором С# 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(); } }