멀티 프로세스의 동기화문제

Jeong Gyejin·2023년 3월 16일
0

JAVA

목록 보기
15/18

공유자원과 임계영역

공유자원

  • 시스템 안에서 각 프로세스와 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수를 의미합니다.
  • 두개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태라고 합니다.

만약 멀티 프로세스나 스레드 환경에서 동기화 문제가 발생한다면 어떻게 해결이 가능할까?

공유된 자원에서 발생하는 동기화 문제는 2개의 스레드가 count라는 변수에 접근하여 count에 1씩 더하는 작업을 실행할 경우에는 1과 2이 동시에 접근해서 +1작업을 한다면 count라는 변수가 2가 되는 것이 아니라 1밖에 되지 않습니다.

이런 문제가 발생할때 뮤텍스 또는 세마포어를 사용합니다.

뮤텍스

1개의 프로세스나 스레드가 스레드만 공유된 자원의 데이터 혹은 임계영역(Critical Section)등에 접근이 가능하게 하는 것을 이야기합니다.

세마포어

n개의 프로세스나 스레드가 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 접근이 가능하며, 스레드가 접근할 때마다 n의 갯수를 감소시키며 n이 0일때는 자원에 접근이 불가능하게 만드는 것을 이야기합니다.

  • 임계영역(Critical section)
    공유할 자원들 즉, 코드 영역에서 여러 스레드들이 접근 할 수 있는 부분을 통제하기 위해서 둘 이상의 프로세스 또는 스레드가 접근하는 것을 막는 코드 부분을 임계영역이라고 하며, 임계영역내에서 코드들은 원자적(프로그램이 중간에 끼어들 수 없음)으로 실행되어야 합니다.

뮤텍스와 세마포어의 차이점

  1. 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없습니다.

  2. 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하며 소유주가 이에 대한 책임을 집니다.
    (뮤텍스의 경우 상태가 두개뿐인 lock이므로 lock을 가질 수가 있습니다.)

  3. 뮤텍스의 경우 뮤텍스를 소유하고 있는 스레드가 이 뮤텍스를 해제할 수 있습니다. 하지만 세마포어의 경우 이러한 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있습니다.

  4. 세마포어는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재합니다. 그러나 뮤텍스는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 clean up이 됩니다.

가장 큰 차이점은 관리하는 동기화 대상의 갯수입니다. 뮤텍스는 동기화 대상이 오직 하나뿐일 때, 세마포어는 동기화 대상이 한개 이상일 때 사용합니다.

profile
항상 더 나은 개발자가 되기 위해서 끊임없이 공부하고 학습하면서 성장하는 사람이 되겠습니다.

0개의 댓글