Critical Section

June Lee·2021년 4월 13일
0

운영체제

목록 보기
15/25

Critical Section

Critical SectionRace Condition에서 생기는 문제 구역이다.
예를 들어,

Thread1에

counter += 1;

Thread2에

counter -= 1;

이라는 operation이 있다면, 이때 이 라인들은 크리티컬 섹션이 된다. 이 부분이 크리티컬 섹션이 되는 이유는, 하나의 동작처럼 보이는 이 operation이 사실은 메모리 속 카운터를 register로 가져오고, 덧셈(혹은 뺄셈)을 하고, 다시 레지스터에서 메모리로 갖다놓는 일련의 동작들로 이루어지기 때문이다.
그렇기 때문에 위의 3가지 동작이 Thread1과 Thread2에서 어떤 순서로 전개되는지에 따라 결과가 달라지는 것이다.


Mutex Variables

Mutual Exclusion(상호 배제)

상호 배제는 critical section 문제를 해결하기 위한 방법 중 하나이다. critical section에 들어갈 수 있는 thread의 수에 제한을 거는 방법이다. 그리고 이 구역에 들어가기 위해서는, mutex variable이 필요하다.

mutual exclusion은 concurrency를 막기 때문에 최소한의 구역만을 critical section으로 잡고 상호 배제를 해줘야 한다.


락(lock): 비어있으면 들어가서 잠그고, 이미 차있다면 블락됨. (이 두 가지를 모두 포함하는 개념이 lock이다)

언락(unlock): 잠금을 풀고 나와서 기다리는 쓰레드가 있다면 깨워줌. (마찬가지로 이 두 가지를 모두 포함하는 개념이 unlock이다)

lock, unlock은 모두 상호 간에 지켜줘야만 의미가 있다. (Advisory Mutex)


critical section에 락을 걸고 들어가는 것을 own a mutex라고 표현한다.

Mutex 사용 순서

  1. mutex variable을 초기화한다.
  2. 여러 쓰레드가 lock을 시도(try lock)하면 하나만 성공하고, 나머지 쓰레드는 기다린다.
  3. Owner thread(구역에 들어간 쓰레드)는 일정한 행위를 수행한다.
  4. 끝나고 나올 때에는 unlock한다.
  5. unlock에 의해 다른 쓰레드 하나가 mutex를 얻고 구역에 들어간다.
  6. 다 썼다면 mutex를 destroy한다.
profile
📝 dev wiki

0개의 댓글