C# 멀티 쓰레드(동기화, Mutex)
C# 멀티 쓰레드(동기화, Mutex)
뮤텍스(Mutex) 클래스는 공유 리소스에 대해 하나의 쓰레드만이 사용 가능하도록 지원하는데 작동방식이 Monitor 클래스와 유사하고 특정 코드 블럭(Critiacal Section)을 서로 다른 프로세스간 배타적으로 Locking하는 기능을 가지고 있다. 이와는 달리 모니터(Monitor) 클래스는 하나의 프로세스 안에서만 사용할 수 있다.
using System; using System.Threading;
public class ThreadTest3 { public string lockString = "Hello"; private static Mutex mutex = new Mutex();
public void Print(string rank) { //WaitOne을 걸어준 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지 mutex.WaitOne(); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { Thread.Sleep(100); Console.Write(","); } Console.WriteLine("{0}{1} ", rank, lockString); } mutex.ReleaseMutex(); }
public void FirstWork() { Print("F"); } public void SecondWork() { Print("S"); } }
class TestMain { [MTAThread] public static void Main() { ThreadTest3 t = new ThreadTest3(); Thread first = new Thread(new ThreadStart(t.FirstWork)); Thread second = new Thread(new ThreadStart(t.SecondWork));
first.Start(); second.Start(); } } |