메뉴 건너뛰기


Developer > Application
1장. 동기화(Synchronization)에 대한 소개
 
다중 프로세스 혹은 다중 쓰레드가 하나의 자원에 접근할 경우 동기화(Synchronization)라는 문제가 발생합니다.
 
예를 들어 하나의 파일을 A라는 프로세스가 읽고 계산을 하는 동안 B라는 프로세스가 파일을 변경한다면 A가 계산 중인 값은 오답의 결과를 내게 됩니다. 이렇게 계산된 결과를 A 프로세스가 파일에 기록을 하게 되면 B프로세스가 변경한 내용은 사라지게 되죠. 이러한 문제는 공유 메모리에서도 마찬가지로 일어나게 됩니다.
일반적인 메모리의 경우 여러 쓰레드에 의해서 위와 같은 문제가 발생하게 됩니다. 비단 파일이나 메모리 뿐만이 아니라 프린터나 스케너와 같이 컴퓨터의 자원에 해당하는 것들은 모두 이러한 문제가 발생할 수 있습니다.
이러한 문제를 해결하는 것을 동기화라고 하고 동기화의 방법에는 크게 세가지가 있습니다.
 
1. File Lock(파일 락)
2. Mutex(뮤텍스)
3. Semaphore(세마포어)
 
위의 세가지 방법은 가장 유명한 것들이구요. 시스템마다 조금씩 다른 동기화 방법들이 있습니다.
 
이번 강좌에는 C언어를 이용하여 이들을 구현하는 것에 대해서 알아보도록 하겠습니다.
 
비록 동기화의 방법이 여러가지가 있지만 공통적인 것은 사용하고자 하는 자원을 하나의 프로세스 혹은 쓰레드가 사용하게 되면 같은 자원을 사용하기를 원하는 다른 프로세스나 쓰레드는 이 자원의 사용이 끝날때가 기다린다는 것입니다.
 
차이점은 다음과 같습니다.
 
File Lock은 대상 자원이 파일에 한정됩니다. 물론 파일이라는 것은 File Handle로 표현되는 모든 자원을 의미합니다.
Mutex는 자원을 획득한 쓰레드만이 해당 Mutex를 해제할 수 있으며 하나의 자원에 하나의 쓰레드만이 사용할 수 있습니다.
Semaphore는 자원을 획득한 쓰레드와 해제하는 쓰레드가 다를 수 있으며 하나의 자원에 지정된 수의 쓰레드가 사용할 수 있습니다.
 
그 외에도 Critical Section(크리티컬 섹션)이라는 개념이 있습니다. 지금까지 위에서 이야기한 File Lock, Mutex, Semaphore는 자원을 사용하는 관점에서 동기화라면 Critical Section은 코드의 사용하는 관점에서 동기화라는 것이 다릅니다.
 
또한, 인터락킹 함수, 조건변수, 이벤트에 대해서도 앞으로 이야기 하도록 하겠습니다.
 
이제 이들을 하나 하나 알아보도록 하죠.

Creative Commons License
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Copyright 조희창(Nicholas Jo). Some rights reserved. http://bbs.nicklib.com