원자적 전환 생성
lock 변수를 읽고 바꾸는 일을 하나의 하드웨어 동작으로 처리해야 두 스레드가 동시에 들어가지 않는다.
인터럽트 비활성화, test-and-set, compare-and-swap은 더 높은 수준의 lock을 만들기 위한 재료다. 실제 코드는 spin과 sleep 비용을 구분해야 한다.
lock 변수를 읽고 바꾸는 일을 하나의 하드웨어 동작으로 처리해야 두 스레드가 동시에 들어가지 않는다.
짧은 커널 구간은 spin이 나을 수 있고, 긴 사용자 구간은 sleep 가능한 mutex가 낫다.
lock 획득과 해제는 임계 구역 안의 읽기/쓰기가 밖으로 새지 않도록 순서 보장도 제공한다.
if (*addr == expected) {
*addr = desired;
success = true;
overflow-wrap: break-word;
word-break: keep-all;
}