ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° Ρ ΡΠ΅Π»ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Π²ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ WaitOne() ΠΈ ReleaseMutex() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π°.
Mutex myMtx = new Mutex();
// ...
myMtx.WaitOne() ; // ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°
// ΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ.
myMtx.ReleaseMutex(); // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° WaitOne() Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΌΡΡΡΠ΅ΠΊΡ. Π ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ReleaseMutex() ΠΌΡΡΡΠ΅ΠΊΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. Π ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»Π°ΡΡΠΎΠ² IncThread ΠΈ DecThread, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ: ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ SharedRes.Count. Π ΠΏΠΎΡΠΎΠΊΠ΅ IncThread ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ SharedRes.Count ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ, Π° Π² ΠΏΠΎΡΠΎΠΊΠ΅ DecThread β Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ. ΠΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΎΠ±ΠΎΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ SharedRes.Count ΡΡΠΎΡ Π΄ΠΎΡΡΡΠΏ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ Mtx, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΠΈΠΌΡΡ ΡΠ»Π΅Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° SharedRes.
// ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ.
using System;
using System.Threading;
//Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΡΠ΅ΡΡΡΡ(ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Count),
// Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΡΡΡΠ΅ΠΊΡ (Mtx), ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π½Π΅ΠΉ.
class SharedRes {
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();
}
}
class MutexDemo {
static void Main() {
// Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ°.
IncThread mt1 = new IncThread("ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ", 5);
Thread.Sleep(1); // ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π½Π°ΡΠ°ΡΡΡΡ
DecThread mt2 = new DecThread("ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ", 5);
mt1.Thrd.Join();
mt2.Thrd.Join();
}
}
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 2
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 3
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 4
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 5
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 4
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 3
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 2
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ SharedRes.Count) ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² WaitOne() ΠΈ ReleaseMutex() Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈ Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Ρ ΠΎΡΡ Ρ Π²Π°Ρ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΌ.
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 1
ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
Π ΠΏΠΎΡΠΎΠΊΠ΅ ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ, SharedRes.Count = 0
ΠΠ΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ ΠΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π±Π΅Π· ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ SharedRes.Count ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅, Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½ΠΎ, ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΡΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠ΄ΠΈΠ». ΠΠΎ ΠΌΡΡΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠΎΡΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
public Mutex(bool initiallyOwned, string ΠΈΠΌΡ)
public Mutex(bool initiallyOwned, string ΠΈΠΌΡ, out bool createdNew)
Π ΠΎΠ±Π΅ΠΈΡ ΡΠΎΡΠΌΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΠΌΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ini tiallyOwned ΠΈΠΌΠ΅Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, ΡΠΎ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡΡΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π»ΡΡΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false. Π ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· Π²ΡΠΎΡΠΎΠΉ ΡΠΎΡΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ createdNew Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΠΎΡΠ΅Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ, ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π½Π° Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ Π±ΡΠ» ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ ΡΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΈΠΏΠ° Mutex, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° MutexSecurity. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².