> For the complete documentation index, see [llms.txt](https://leehyokyun.gitbook.io/openbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leehyokyun.gitbook.io/openbook/2-7.-race-condition.md).

# 2-7. Race condition의 본질

동시 자원 점유의 조절의 관점 아닌, race condition 상태 그 자체를 나타내는 상황에 대하여

### 1. 데드락

다른 자원의 점유를 원하는데 동시에 자신도 자원을 점유하고 있는 상태로, 두 개 이상의 스레드가 자원 점유와 함께 자원 점유를 대기하고 있어 스레드의 상태가 멈추고, 이 상태가 지속되는 상황을 의미한다.

* 스레드 A = 자원 1 보유 중, 스레드 B = 자원 2 보유 중, 그런데, 스레드A와 스레드B 모두 자원을 보유 중이면서 다른 자원의 접근을 방지(lock/synhced)
* 그런데, 스레드 A가 자신의 자원을 점유한 상태에서 스레드 B의 자원(lock)을 요청함과 동시에, 스레드 B가 자신의 자원을 점유한 상태에서 스레드 A의 자원(lock)을 요청한다. 둘 다 서로의 상태를 놓기를 기대하는데, 본질적으로 자신의 lock 점유를 놓지 않는다.
* 본인이 소유한 자원을 lock, 그 상태에서 자원의 점유를 바라는데(\*양보하지 않고), 그 대기 상태가 지속되어 스레드는 멈춘다, 즉 DeadLock이 발생한 상황이다.

### 2. 라이브락

반면 자원을 점유하지 않고 계속 양보하기에, 스레드는 멈춰있지 않는다. 계속 실행하지만, 자원만 양보하는 상황이며 작업을 진행하지 않는 상태가 라이브락이다.

* 스레드 A가 lockA 획득하고, 스레드 B가 lockB를 획득한 상태에서, 스레드 A가 lockB를 요청하는데 실패하면 본인의 A를 포기한다.
* 이때 동시에 스레드 B가 lockA를 요청하였는데, 획득에 실패하여 본인의 락을 포기한다. 이 상황이 반복되어, 작업의 진전이 없다.
* 자원 점유 실패 시 양보를 하는데, 그 동시적인 점유 시도 상황에서 서로 락 획득 상태가 반복되고, 이 점유 상태가 붕괴되지 않고 반복되어 무의미한 순회만 진행, 작업의 진전이 없는 상황이 바로 라이브락이다.

  <br>

<br>
