using System;
using System.Threading;
namesapce MultiThrApp
{
class MyClass
{
private int coutner = 1000; // 공유변수
private object lockObject = new object(); // lock문에 사용될 공유 object
public void Run()
{
// 10개의 쓰레드를 동일 메서드에서 실행
for(int i - 0; i < 10; i++)
{
new Thread(SafeCalc).Start();
}
}
// Thread-Safe 메서드
private void SafeCalc()
{
// 한번에 한 쓰레드만 lock블럭 실행
lock(lockObject)
{
// 필드값 변경
counter++;
// 가정 : 다른 복잡한 일을 한다(일부러 엉키게 했음)
for(int i = 0; i<counter; i++)
for(int j = 0; j<counter; j++)
// 필드값 읽기
Console.WriteLine(counter);
}
}
}
}
/*
출력:
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
*/
lock object를 이용하여 크리틱컬 섹션을 만들어서
쓰레드 관리를 보다 안전하게 할수 있게 됐다.