Skip to content
 

스래드간 Sync 처리시 주의할점

멀티스래드 또는 멀티프로세서간 데이타 처리를 할때 자주 거론되는 기술이 Sync 이다.

본인 역시 가끔 실수를 하다 보니 한번은 꼭 정리할려고 했던거라 개념적인 내용을 정리해 볼려고 한다.

멀티스래드와 멀티프로세서의 차이는 하나의 실행파일이냐 아니냐 정도로 구분을 하면될것이고 이하 각 스래드로 통일하도록 하겠다.

Sync라는것의 필요성은 두개 이상의 스래드가 동시에 하나의 리소스를 차지하기 위한 충돌을 막기 위한 방법이다. 예를 든다면 하나의 파일을 동시에 쓰는 경우 또는 프린터를 하는경우 약간 다른 의미일수는 있지만 통신으로 데이타를 전송하는 경우 등이다.

자주 사용하는 명령은 Mutex, Semaphore, Event 일꺼다. 각 명령의 사용법은 인터넷에 너무나 많이 있으니 굳이 설명할 필요는 없고 각각의 명령의 특징을 살펴보고자 한다. 전문적인 기술적 설명이 아닌 의미적인 설명으로..

Mutex는 딱 한개만 사용해야 하는 경우에 적합하다. 파일쓰기와 같이 두개가 동시에 쓸경우에 문제가 발생하는 경우에 편리하다. 단점이라면 2개 이상의 스래드가 사용하게 되는 경우에 우선순위가 없다는 것이다. 시스템에서 어느정도 공평하게 한다고는 하나 실제 사용을 해보면 먼저 대기하는 스래드가 먼저 진입한다는 보장이 없다.

Semaphore는 접속 가능 숫자에 따라서 의미가 조금 다르게 쓰일 수 있다. 최대 1개 공유로 하면 Mutex와 매우 유사하게 동작한다. Mutex와 차이라면 대기 순서대로 진입순서가 보장된다는 점이다.

Mutex와 Semaphore가 다른 점이 하나 더 있는데 하나의 Mutex는 하나의 스래드에서 사용하는 경우에 아무 의미가 없으나 Semaphore 는 스래드와는 별개로 처리가 가능하다.

예를 든다면 Mutex는 두개의 스래드가 lock 을 처리 할때만 동작한다는 의미다. A 스래드가 lock을 하고 B 스래드가 unlock을 할 수 없다. Semaphore는 스래드와 무관하게 누구나 lock 과 unlock을 사용할 수 있다. Mutex 로 하나의 스래드에서 lock을 반복 호출해도 아무런 반응이 없지만 Semaphore 는 하나의 스래드에서 lock을 반복호출하면 누군가가 unlock을 해줄때까지 대기 상태가 된다.

Event는 Mutex와 매우 비슷하나 의미적으로 lock, unlock이라기 보다는 flag의 의미로 사용한다.

 

위의 내용에 대한 의미를 알고서 해당 함수를 본다면 좀더 효과적인 코딩을 할 수 있을 것이다.

One Comment

  1. 경민 says:

    헉. 좋은 정보 감사합니다 🙂

Leave a Reply