su3inni / cs-study

0 stars 0 forks source link

Synchronization 동기화를 위한 여러 전략과 차이 #22

Open su3inni opened 1 month ago

su3inni commented 1 month ago

동기화를 위한 여러 전략과 차이

mutual exclusion 을 보장하기 위해 Lock 을 사용한다.

1. SpinLock

Lock을 가질 수 있을 때까지 반복문을 진행하는 방법

2. Mutex

Lock 을 가질 수 있을 때까지 휴식을 취하는 방법

SpinLock이 가지는 CPU 낭비의 단점을 개선하기 위한 방법

  • Queue 를 활용해 락을 가지려는 프로세스/스레드의 대기 상태를 만든다.
  • Mutex의 변수 value , guard
  • value ( 1 or 0 ) : value를 취득해야만 critical section에 접근 가능한 것
  • guard : value라는 값 자체도 여러 스레드/프로세스가 가지려는 공유 자원
  • value 값 자체의 변화도 보호를 받으면서 변경되어야하는 변수 즉, guard 를 얻고 value 값을 변해야한다. Mutex에서도 atomic 한 명령어 TestAnd Set을 사용한다.

2-1. SpinLock 보다 항상 Mutex 가 좋은가?

프로세스/스레드를 잠들게하고 깨우는 과정에서 context switching 이 발생한다.

3. Semaphore

Signal Mechanism을 가진 하나 이상의 프로세스/스레드가 critical section에 접근하는 방법

세마포는 프로세스/스레드의 순서를 정해줄 때 사용할 수 있다.

3-1. Mutex와 Binary Semaphore?

Mutex는 Priority Inheritance 속성을 가지지만, Semaphore 는 그 속성이 없다.

3-2. 언제 Mutex ? Semaphore ?

Reference

https://www.youtube.com/watch?v=gTkvX2Awj6g