Open su3inni opened 1 month ago
Race Condition
Synchronization : 동기화
Critical Section : 임계 영역
하나의 프로세스/스레드만 진입하는 것 = mutual exclusion
mutual exclusion 을 보장하기 위해 Lock 을 사용한다.
Lock을 가질 수 있을 때까지 반복문을 진행하는 방법
CPU 레벨에서 먼저 실행되는 프로세스/스레드를 정한다.
Lock 을 가질 수 있을 때까지 휴식을 취하는 방법
SpinLock이 가지는 CPU 낭비의 단점을 개선하기 위한 방법 Queue 를 활용해 락을 가지려는 프로세스/스레드의 대기 상태를 만든다. Mutex의 변수 value , guard value ( 1 or 0 ) : value를 취득해야만 critical section에 접근 가능한 것 guard : value라는 값 자체도 여러 스레드/프로세스가 가지려는 공유 자원 value 값 자체의 변화도 보호를 받으면서 변경되어야하는 변수 즉, guard 를 얻고 value 값을 변해야한다. Mutex에서도 atomic 한 명령어 TestAnd Set을 사용한다.
SpinLock이 가지는 CPU 낭비의 단점을 개선하기 위한 방법
프로세스/스레드를 잠들게하고 깨우는 과정에서 context switching 이 발생한다.
Signal Mechanism을 가진 하나 이상의 프로세스/스레드가 critical section에 접근하는 방법
세마포는 프로세스/스레드의 순서를 정해줄 때 사용할 수 있다.
Mutex는 Priority Inheritance 속성을 가지지만, Semaphore 는 그 속성이 없다.
Priority Inheritance?
Mutex 는 우선순위가 낮은 작업을 우선순위를 높여줘서 빠르게 Lock을 반환할 수 있도록 한다.
https://www.youtube.com/watch?v=gTkvX2Awj6g
동기화를 위한 여러 전략과 차이
Race Condition
Synchronization : 동기화
Critical Section : 임계 영역
mutual exclusion 을 보장하기 위해 Lock 을 사용한다.
1. SpinLock
Lock을 가질 수 있을 때까지 반복문을 진행하는 방법
2. Mutex
Lock 을 가질 수 있을 때까지 휴식을 취하는 방법
2-1. SpinLock 보다 항상 Mutex 가 좋은가?
프로세스/스레드를 잠들게하고 깨우는 과정에서 context switching 이 발생한다.
3. Semaphore
Signal Mechanism을 가진 하나 이상의 프로세스/스레드가 critical section에 접근하는 방법
세마포는 프로세스/스레드의 순서를 정해줄 때 사용할 수 있다.
3-1. Mutex와 Binary Semaphore?
Mutex는 Priority Inheritance 속성을 가지지만, Semaphore 는 그 속성이 없다.
Priority Inheritance?
Mutex 는 우선순위가 낮은 작업을 우선순위를 높여줘서 빠르게 Lock을 반환할 수 있도록 한다.
3-2. 언제 Mutex ? Semaphore ?
Reference
https://www.youtube.com/watch?v=gTkvX2Awj6g