제임스딘딘의
Tech & Life

개발자의 기록 노트/C#

[C#] 메소드 동기화

제임스-딘딘 2011. 7. 21. 01:38
동기화를 원하는 몇개의 메소드가 클래스 안에 있다고 가정하자.
(물론 그것들은 여러개의 스레드에 의해 동시에 사용될 수 없게 하려는 상황이라고 가정한다.)

자바 프로그래머라면 스레드 사용시 메소드 동기화를 위해 단지 다음과 같은 방법을사용 하면 된다는걸 알고 있을것이다.

public synchronized void methodName() {...}


C#에서는 이와같은 효과를 주기 위해 어떻게 해야 할까.

자바를 먼저 공부했던 나는 C#을 공부하면서 이와같은 의문을 가졌고, 찾은 해결방법은 다음과같다.


방법1. Just wrap the entire content of your method in a lock statement.
(메소드의 전체내용을 lock 문장으로 둘러 싸면 된다)
public class MyClass
{
public void MyMethod()
{
lock(typeof(MyClass))
{
// 메소드의 내용
//
}
}
}



방법2.
[MethodImpl(MethodImplOptions.Synchronized)]
public void MyMethod()
{
// Contents of method
}

Both are not exactly the same and the second one is more like the
synchronized keyword in Java but in general people use locks in C# as it
gives you more fine grained control.


출처 : http://bytes.com/topic/c-sharp/answers/274531-c-synchronized-methods