1. CAS 일반적으로 쓰는 락은 소프트웨어 락으로, 인스트럭션이 굉장히 많이 소모 된다. 하드웨어 lock은 CAS를 어셈으로 구현하고, compare and set을 수행될 때까지 루프를 도는 spin lock을 말한다. lock에 소모되는 인스트럭션 수가 적어 훨씬 빠르다. 하지만 spin lock이니 lock acquire까지 너무 많은 시간이 소요될 경우 비효율 적이다. 어셈으로 구현되다 보니, 아키텍쳐마다 구현이 다르다. DPDK에서 지원하는 락이 CAS로 구현되어 있다. 2. RCU read-copy-update. publish and subscribe 모델의 일종. read가 읽고 있을때 update가 발생하면 복사본을 만든다. read가 다 읽으면 reader가 바라보고 있는 포인터를 새..
1. n writer, n reader semaphore 사용. 매우 느림. 심지어 wait 상태도 busy.....하므로 2. n writer, 1 reader writer들과 reader의 자원을 분리한다. writer의 업데이트를 reader에 알려주는 방식으로 reader 스레드가 업데이트를 받아 직접 자료를 수정하고 읽는다. 3. 1 writer, n reader RCU 사용. (read copy update) writer가 자원을 미러링한 후 수정 -> reader에게 새로운 자원 포인터 넘김 * 3의 경우가 가장 많은 경우 커널엔 RCU가 구현되어있지만 (http://jake.dothome.co.kr/rcu/) 유저레벨 개발에선 직접 RCU를 구현해야 함.