# Mutex와 SpinLock의 차이는 무엇인가요?

* `Mutex(Mutual Exclusion)`와 `SpinLock`은 **동시성 프로그래밍에서 여러 쓰레드가 공유 리소스에 동시에 접근하지 못하도록 하는 동기화 기술이다.**
* **Mutex**는 오직 하나의 쓰레드만 **임계 구역(critical section)** 에 접근할 수 있도록 보장한다.
  * 하나의 쓰레드가 `Mutex`를 획득하면 다른 쓰레드는 해당 `Mutex`를 획득할 때까지 대기한다.
  * `Mutex`가 잠겨 있으면 현재 쓰레드는 다른 작업을 수행하고, `Mutex`가 해제되면 다시 공유 리소스에 접근할 수 있다.
* **SpinLock**은 `Mutex`와 유사한 목적을 갖지만, 쓰레드가 `Mutex`를 획득할 때까지 반복적으로 락을 시도하는 동기화 기법이다.
  * 락을 획득할 때까지 쓰레드가 계속해서 무한 반복하며(Spin), 다른 쓰레드가 락을 해제할 때까지 기다린다.
  * **SpinLock**은 `Mutex`가 잠겨 있으면 현재 쓰레드는 해제될 때까지 대기하고, `Mutex`가 해제되면 즉시 공유 리소스에 접근한다.

> **꼬리 질문**
>
> **임계 구역(critical section)이 무엇인가요?**
>
> * 여러 프로세스가 데이터를 공유하며 수행될 때, **각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분**을 말한다.
> * 공유 리소스에 동시에 접근하지 못하도록 보호하는 코드 블록을 말한다.
> * 공유 데이터를 여러 프로세스가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에, 한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.
