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?

Common pitfalls

Dead Lock

Live Lock

Starvation

ABA