CS
[CS]임계영역과 데드락
programmer-faust
2025. 8. 28. 03:45
- 순서
- 임계영역이란?
- 데드락이란?
- 데드락의 발생 조건
- 임계영역이란?
- 한 번에 하나의 스레드만 접근해야 하는 코드 영역이다.
- 공유 자원을 여러 스레드가 동시에 수정하면 경쟁 상태가 발생할 수 있음
- 이를 방지하기 위해 임계영역을 설정하고, 스레드가 진입할 때 락을 걸고 나올 때 해제함
- 데드락이란?
- 둘 이상의 스레드가 서로 상대방이 가진 자원을 기다리며 무한 대기 상태에 돌입한 것을 뜻함
- 데드락 상태가 되면 시스템이나 프로그램 일부가 더 이상 진행하지 못함
- 데드락의 발생 조건
- 상호 배제: 자원은 한 번에 하나만 사용 가능
- 점유 및 대기: 자원을 점유한 상태에서 다른 자원을 기다림
- 비선점: 자원 강제 회수가 불가능
- 순환 대기: 스레드가 순환 형태로 기다림
- 요약
- 임계영역은 공유 자원을 안전하게 다루기 위한 필수 도구
- 데드락은 임계영역을 잘못 설계하거나 여러 자원을 동시에 사용할 때 발생
- 언리얼에서는 FCriticalSection/FScopeLock을 사용, Lock 순서 통일로 데드락을 예방
- 임계영역이 없는 경우에는 락/자원이 존재하지 않으니 데드락도 발생하지 않음
| 구분 | 임계영역 | 데드락 |
| 정의 | 공유 자원 접근 시 한 번에 하나만 진입 | 스레드들이 서로 자원을 기다리며 무한 대기 |
| 목적 | 경쟁 상태 방지 | 발생하면 프로그램 진행 불가, 피해야 함 |
| 예시 | C++:std::mutex UE:FCriticalSection |
잘못된 Lock 순서, 여러 자원 동시에 접근 시 발생 |
| 주의 | 임계영역 안에서 오래 걸리면 성능이 저하됨 | Lock 순서, 자원 점유 정책으로 예방 가능 |