C# 멀티 쓰레드(동기화, lock)

홈 > 공유팁! > 프로그램 관련
프로그램 관련

C# 멀티 쓰레드(동기화, lock)

꽁스짱 0 1055

C# 멀티 쓰레드(동기화, lock)

멀티쓰레드 환경인 경우 여러 곳에서 같은 객체의 메소드를 호출하는 경우에 예기치 않은 결과가 나타날 수 있다. 어떤 메소드의 사용을 한 쓰레드가 끝난 후 다른 쓰레드가 접근하게 하려면 lock 문을 사용 한다. 다음의 예제를 보도록 하자.

using System;

using System.Threading;

public class ThreadTest3

{

public string lockString = "Hello";

private object obj = new object();

public void Print(string rank)

{

//lock을 걸어준 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지

lock (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);

}

}

}

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();

}

}

0 Comments
제목