Critical Section이란 무엇일까?

2020. 12. 23. 21:54Study

Critical Section

Critical Section은 (임계구역 또는 공유변수 영역) 병렬프로그래밍에서 둘 이상의 스레드 (멀티스레드)가 동시에

접근해서는 안되는 공유 자원(파일, 입출력, 공유 데이터 등) 을 접근하는 명령문 또는 코드의 일부 영역을 말합니다.

 

병렬프로그래밍에서 A라는 스레드가 공유 데이터의 값 변경을 시도하는 순간 B라는 스레드가 그 값을 읽는다면

그 값이 변경된 값인지 변경되기 전 값인지 예측할 수 없습니다. 이러한 문제로 동기화 처리 (synchronized)를

반드시 해줘야하며, 임계구역에 실행되는 스레드는 lock을 획득하게 되는데 이 lock은 오직 하나의 스레드만 가질 수 있습니다.

 

임계 구역 문제를 해결하기 위해서는 아래와 같이 3가지 조건을 충족해야합니다.

 

상호 배제 (mutual exclusion)

- 하나의 프로세스가 임계 구역에서 실행되고 있다면, 다른 프로세스들은 임계 구역에서 실행될 수 없습니다.

진행 (progress)

 - 임계 구역에 실행되고 있는 프로세스가 없을 경우, 들어갈 프로세스를 적절히 선택해줘야합니다.

한정된 대기 (bounded waiting)

 - 프로세스의 기아를 방지하기 위해, 한번 임계 구역에서 실행된 프로세스는 다음 실행에 대한 제한을 두어야합니다.

 

코드의 구역

입장 구역(entry section)

- 각 프로세스가 자신의 임계 구역에 진입하기 위해서 진입허가 요청을 구현하는 코드 영역

임계 구역(critical section)

- 입장 구역에서 진입허가가 나면 임계 구역에 진입

퇴장 구역(exit section)

- 임계 구역을 빠져나왔음을 알리는 코드 영역

나머지 구역(remainder section)

- 이 외에 다른 코드 부분들을 총칭하는 나머지 구역

 

Ex)

do {

     wait(mutex);  //입장 구역

     임계 구역

     signal(mutex); //퇴장 구역

     나머지 구역

}

 

 

 

'Study' 카테고리의 다른 글

intent Flag란 무엇일까?  (0) 2021.01.27
mutable 과 immutable  (6) 2021.01.20
DeadLock이란 무엇일까?  (0) 2020.12.16
Multi Thread와 Multi Process란 무엇일까?  (0) 2020.09.03
오버헤드란 무엇일까?  (0) 2020.08.31