Thread 동기화 문제 static일 경우

|

동기화시 가장 많이 사용하는 키워드는 lock

하지만 lock사용시 인수가 static일경우 사용 방법이 조금 틀리다

기본적으로 lock을 걸 경우 간단하게 내부 필드일 경우 this를 사용하면 되지만

static일경우 바로 lock을 사용할시 에러..

그렇다면??

typeof(클래스명)

이러한 형태로 나타내 줘야 한다

Object는??

더욱 간단하다

클래스명.object

이련형태로 lock을 결면 성공~!!!

사용 예)


public class Top{
 private static int limit = 0;
 public void SayHello(){
  int hash = Thread.CurrentThread.GetHashCode();
  int count =0;
  lock(typeof(Top)){
   while(count<10){
    Console.WriteLine("Thread " + hash + ":" + limit++);
    count++;
    Thread.Sleep(10);
   }
  }//lock
 }
}

Object일 경우)

public class Top{
 private static object obj = new object();
 public void SayHello(){
  int hash = Thread.CurrentThread.GetHashCode();
  int count =0;
  lock(Top.obj){
   while(count<10){
    Console.WriteLine("Thread " + hash + ":" + count++);
    Thread.Sleep(10);
   }
  }//lock
 }
}

And