단일 코어에서는 중간에 선점되지 않게 하지만 멀티코어의 다른 CPU 실행은 막지 못합니다.
락 구현 선택
인터럽트 비활성화, 원자 명령어, 스핀락, 뮤텍스, futex는 임계 영역 길이와 경합 정도에 따라 비용이 달라집니다.
disable단일 코어의 짧은 보호
CAS원자적 비교와 교체
spin짧은 경합은 바쁜 대기
sleep긴 대기는 커널 큐
Test-and-Set과 CAS는 읽기와 쓰기를 끊기지 않는 하나의 하드웨어 동작으로 묶습니다.
임계 영역이 아주 짧으면 잠들고 깨우는 비용보다 잠깐 반복 확인하는 편이 낫습니다.
대기가 길어질 수 있으면 CPU를 낭비하지 않도록 스레드를 잠들게 하는 방식이 유리합니다.
경합이 없으면 사용자 공간 CAS로 끝나고, 경합이 있을 때만 커널 futex 대기 큐로 내려갑니다.
임계 영역 길이, 선점 가능성, 코어 수, 락 경합 빈도를 함께 봐야 올바른 도구를 고릅니다.