CS

[CS]임계영역과 데드락

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