false sharing 은 공유한 적이 없어서 false 다
스레드마다 자기 카운터를 줬는데 병렬화가 오히려 느려집니다. 락도 없고 겹쳐 쓴 값도 없습니다. 두 카운터가 같은 64바이트 캐시 라인에 앉아 있어서 그렇습니다. false sharing 이 무엇이고 어떻게 확인하고 어떻게 고치는지를 직접 재본 숫자로 봅니다.
한 스레드만 만지면 잠글 것이 없다
자물쇠는 부딪혔을 때 처리하는 도구입니다. 애초에 안 부딪히게 짜면 자물쇠가 필요 없습니다.
내가 처음인지 물어보려면 CompareExchange 다
lock 은 들어가도 되는지만 알려 줍니다. 딱 한 번만 일어나야 하는 일에는 다른 도구가 필요합니다.
조건 변수는 락을 놓고 기다렸다가 다시 잡는다
락을 쥔 채로 조건을 기다리면 아무도 그 조건을 바꿔 줄 수 없습니다. 조건 변수는 락을 놓는 것과 기다리는 것을 한 번에 합니다. Monitor.Wait 과 Pulse 가 그것이고, if 로 검사하면 100번 중 100번 깨집니다.
lock 은 순서를 만들고 대가를 받는다
여러 줄을 묶어 지키는 유일한 방법인데, 걸어 놓고 잘못 쓰면 프로그램이 멈춰 섭니다.