2020. 12. 23. 21:54ㆍStudy
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 |