C# 멀티 쓰레드(동기화, Monitor)
C# 멀티 쓰레드(동기화, Monitor)
lock 문 이외에 System.Monitor라는 클래스가 있는데 이 Monitor 클래스에는 Enter, Exit 메소드가 있다. Enter 메소드는 잠금 상황으로, Exit 메소드는 잠금을 해제하는 역할을 한다. 앞에서 작성한 예제를 System.Monitor를 이용하는 예문으로 바꿔 보자.
using System; using System.Threading;
public class ThreadTest3 { private object obj = new object(); public string lockString = "Hello"; public void Print(string rank) { //Monitor.Enter 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지 Monitor.Enter(obj); 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); } Monitor.Exit(obj); }
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(); } } |