C# 프로그래밍 기초 실습 전자책
쓰레드 동기화 - Thread-Safe

한 메서드를 복수의 쓰레드가 동시에 실행하고 그 메서드에서 클래스 객체의 필드들을 읽거나 쓸 때, 복수의 쓰레드가 동시에 필드값들은 변경할 수 있게 된다. 객체의 필드값은 모든 쓰레드가 자유롭게 엑세스할 수 있기 때문에, 메서드 실행 결과가 잘못될 가능성이 크다. 이렇게 쓰레드들이 공유된 자원(예를 들어 객체 필드)을 동시에 접근하는 것을 막고, 각 쓰레드들이 순차적으로 혹은 제한적으로 접근하도록 하는 것이 쓰레드 동기화 (Thread Synchronization)이다. 또한 이렇게 쓰레드 동기화를 구현한 메서드나 클래스를 Thread-Safe하다고 한다. .NET의 많은 클래스들은 Thread-Safe하지 않는데, 이는 Thread-Safe를 구현하려면 Locking 오버헤드와 보다 많은 코딩을 요구하는데, 실제 실무에서 이러한 Thread-Safe를 필요로 하지 않는 경우가 더 많기 때문이다.



쓰레드 동기화를 위한 .NET 클래스들

쓰레드 동기화를 위하여 .NET에는 (Version에 따라 다르지만) 많은 클래스와 메서드들이 있다. 이 중 중요한 것들로서 Monitor, Mutex, Semaphore, SpinLock, ReaderWriterLock, AutoResetEvent, ManualResetEvent 등이 있으며, C# 키워드로는 lock, await 등이 있다. 쓰레드 동기화를 위해 자주 사용되는 방식으로서, (1) Locking으로 공유 리소스에 대한 접근을 제한하는 방식으로 C# lock, Monitor, Mutex, Semaphore, SpinLock, ReaderWriterLock 등이 사용되며, (2) 타 쓰레드에 신호(Signal)을 보내 쓰레드 흐름을 제어하는 방식으로 AutoResetEvent, ManualResetEvent, CountdownEvent 등이 있다.



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment heratic@*** 5/31/2018 1:30:41 AM
Comment admin@*** 5/31/2018 6:37:43 PM

Comment 의견/코멘트 쓰기
이메일
 *정확한 이메일이 아닐 경우 삭제될 수 있습니다
의견/코멘트
좌측의 3자리 문자들을 입력해 주십시오





아티클 모바일 링크
C# 스터디 소셜미디어
쉽게 배우는 파이썬 기초