티스토리 뷰

새로운 게시물이 작성되었습니다 => https://server-technology.tistory.com/479

현재 글과 새로운 게시물 둘 다 읽어보시면 도움이 될 것이라 생각합니다.

 

뮤텍스락: 공유 자원 1개에 대하여 오직 하나의 스레드만이 접근할 수 있도록 하는 상호 배제(Mutual Exclusion) 기법이다.
세마포어: 공유 자원 n개에 대하여 여러 스레드가 동시에 접근할 수 있도록 n개의 자원을 제어한다.

 

뮤렉스락(Mutex Lock)

1개의 공유 자원에 1개의 스레드 또는 프로세스만 접근할 수 있도록 제어한다. 이를 상호 배제(Mutual Exclusion)라고 한다.

뮤텍스 락

 

공유 자원을 사용하고 있는 스레드(또는 프로세스)는 Key를 가지고 있다. Key를 가지고 있는 스레드는 공유 자원을 사용하고 있음을 의미한다. 반대로 Key가 없는 스레드는 공유 자원에 접근할 수 없다.

→ Key를 사용하여 여러 스레드가 1개의 공유 자원에 동시에 접근할 수 없도록 막는다.

 

공유 자원: Toilet

공유 자원에 접근하기 위한 물체: Key

스레드: 사람

공유 자원을 사용하는 스레드: A

Key를 가지고 있는 스레드: A

Key가 없어 임계 영역에 접근할 수 없는(대기) 스레드: B

 

스레드 A가 공유 자원을 사용을 마치고 Key를 반납하면, 대기 중이던 스레드 B가 해당 Key를 가져간다.

Key를 갖고 있는 스레드 B는 공유 자원에 접근할 수 있게 된다.

공유 자원을 사용하는 스레드: B

Key를 가지고 있는 스레드: B

Key가 없어 임계 영역에 접근할 수 없는(대기) 스레드: C

 

wait: 임계 영역에 접근하기 위한 lock을 얻기 위해 대기 중인 상태

signal: 임계 영역을 해제하면 lock을 반환

do {
    wait(lock); // 공유 자원을 사용하기 위해 대기
    // Critical Section
    signal(lock); // 공유 자원 사용을 완료하면 임계 영역 해제
} while(true);

 

세마포어 (Semaphore)

n개의 공유 자원에 여러 스레드가 접근할 수 있도록 제어하는 방식이다.

세마포어

 

주의할 점은 1개의 자원에 대해서 여러 스레드가 동시에 접근하는 방식이 아닌, n개의 자원에 여러 스레드가 동시에 접근할 수 있도록 하는 것이다.

 

세마포어는 카운터라는 변수를 사용하여 여러 스레드가 공유 자원을 사용할 수 있도록 제어한다.

공유 자원을 사용하던 스레드가 사용을 완료하면 카운터 값이 1이 증가한다.

동시에 해당 공유 자원을 사용하기 위해 대기하던 스레드가 있다면 카운터 값을 감소시키고 사용한다.

 

공유 자원: Toilet

공유 자원을 제어하는 변수: Counter

스레드: 사람

공유 자원을 사용하는 스레드: A

공유 자원에 접근할 수 있는 스레드 개수: 2

대기 중인 스레드: 없음

 

이전에 Counter가 2였기 때문에 2개의 스레드가 공유 자원에 접근할 수 있었다.

따라서 스레드 B와 C가 남은 공유 자원에 접근하여 사용 중이다.

이후에 스레드 D가 공유 자원을 사용하고자 하였으나, Counter 값이 0이기 때문에 대기 중인 상태가 된다.

공유 자원을 사용하는 스레드: A, B, C

공유 자원에 접근할 수 있는 스레드 개수: 0

대기 중인 스레드: D

 

P: 공유 자원을 사용하기 전(임계 영역 접근 전)에 수행

V: 공유 자원을 사용 후(임계 영역에서 나온 후)에 수행

S: 세마포어 변수(사용 가능한 공유 자원 개수)

P(S) {
    while S <= 0; // 접근할 수 있는 자원이 없다면 대기
    S--; // 자원 획득
}

V(S) {
    S++; // 자원 해제
}

위 이미지에서 스레드 D는 P연산에서 while문에 의해 대기 중인 상태이다.

공유 자원을 사용 중인 스레드 A, B, C 중에 사용을 완료한 스레드가 생기면 V 연산을 수행하여 S 값을 증가시킨다.

이때, 스레드 D는 S ≥1이 됨에 따라 대기를 종료하고 공유 자원에 접근(S—)하게 된다.

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30