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