public static int Count = 0;

public static Mutex Mtx = new Mutex();

}

// В этом потоке переменная SharedRes.Count инкрементируется, class IncThread { int num;

public Thread Thrd;

public IncThread(string name, int n) {

Thrd = new Thread(this.Run); num = n;

Thrd.Name = name;

Thrd.Start();

}

// Точка входа в поток, void Run()    {

Console.WriteLine(Thrd.Name + ' ожидает мьютекс.');

// Получить мьютекс.

SharedRes.Mtx.WaitOne();

Console.WriteLine(Thrd.Name + ' получает мьютекс.'); do {

Thread.Sleep (500);

SharedRes.Count++;

Console.WriteLine('В потоке ' + Thrd.Name +

', SharedRes.Count = ' + SharedRes.Count);

num— ;

} while(num > 0);

Console.WriteLine(Thrd.Name + ' освобождает мьютекс.');

// Освободить мьютекс.

SharedRes.Mtx.ReleaseMutex();

}

}

// В этом потоке переменная SharedRes.Count декрементируется, class DecThread { int num;

public Thread Thrd;

public DecThread(string name, int n) {

Thrd = new Thread(new ThreadStart(this.Run)); num = n;

Thrd.Name = name;

Thrd.Start();

}

// Точка входа в поток, void Run()    {

Console.WriteLine(Thrd.Name + ' ожидает мьютекс.');

// Получить мьютекс.

SharedRes.Mtx.WaitOne();

Console.WriteLine(Thrd.Name + ' получает мьютекс.'); do {

Thread.Sleep(500) ;

SharedRes.Count—;

Console.WriteLine('В потоке ' + Thrd.Name +

', SharedRes.Count = ' + SharedRes.Count);

num— ;

} while(num > 0);

Console.WriteLine(Thrd.Name + ' освобождает мьютекс.');

// Освободить мьютекс.

SharedRes.Mtx.ReleaseMutex();

}

}

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату