lock
Race Condition
두 스레드가 concurrent하게 실행될때 이상하게 동작하는것
Critical Section
두 스레드가 concurrent하게 실행될때 race condition이 발생하는 영역.
Critical Section 처리방법? Synchronization Primitives? Lock구현?
Mutex(=Lock)(=binary semaphore)
Spin Lock: CAS로 구현하는 제일 기본적인 락
Semaphore: spin lock과는 다르게 대기큐를 둬서 자원이 생길때마다 큐의 맨앞에것에 할당해줌. 일반적으로 효율적이나 context switching 발생으로 latency는 spin lock이 더 나을 수 있음.
Conditional Variable(0으로 시작하고 특정조건 만족시 1로 증가(=signal)시켜주는 semaphore)
Barrier
Transaction Memory
Compare and swap
(사실상) 모든 thread safety 관련 코드는 얘를 기반으로 처리됨. CAS(x,y,z)=x와y값을 비교해서 같으면 x에z를 할당하는 'atomic'명령. CAS없이 공유메모리만으로 SW적인 해결법(Lamport's Bakery Algo 등)과 분산시스템버전(Maekawa's Algo 등)도 있지만 굳이 알 필요는 없을듯.
Coarse grained lock
Fine grained lock
Lock free
Concurrent Design Patterns
RW lock
Monitor: 한 객체의 public접근을 한번에 한 스레드만 접근가능(mutual exclusive) + condition variable까지 추가됨. Coarse Lock?