화장실에 들어간 사람이 나오질 않는데, 이 상황에서 그냥 서서 대기하는 상태가 SpinLock의 형태이다.
SpinLock의 경우에는 Context Switching 이 일어나지 않는다.
cf) Cotext Switching : 쓰레드 환경에서 코어는 영혼의 역할을 한다 하였다. 여기서 영혼이 응용프로세스 즉 유저레벨 에서만 돌아가는 줄 아는데, 사실은 아니다. 코어는 O.S 즉 커널레벨 에서도 돌아가게 되는데, 여기서 커널레벨은 쓰레드가 유저레벨에 있는 한 프로세스를 실행하다가 다른 프로세스로 넘어 갈 때, 어디로 넘어갈지를 집어준다거나, cout과 같은 출력문을 받아 하드웨어에 접근한다 할 때 등 많은 상황에서 커널레벨로 돌아가게 된다.
이러한 Context Switching은 결론적으로 서버가 느려지게 한다. 그리고 쓰레드 끼리의 변형이 일어날 때 일어난다.
화장실에 사람이 있을 때, 일단 자리로 돌아간 후 얼마있다가 다시 돌아오는 구조이다.
이 경우 Context Switching이 일어난다.
하지만 대기 시간이 길어 진다면 이 방법이 SpinLock 보다 효율적 일지 모른다.
화장실에 사람이 있을 때, 직원을 이용하여 화장실이 비게되면 다음 사용자에게 알려 달라는 식의 구조이다.
이 구조 같은 경우에는 일단 직원이라는 또 다른 리소스를 쓰게 된다는 점과, Context Switching이 일어난다는 점이 문제이다.
하지만 이 또한 상황마다 위 상황보다 더 효율적일 수 있고 아닐 수도 있다.