자 서른 세 번째 키워드 '크리티컬 섹션'를 알아보겠다.
스레드를 알아보았던 키워드와 연관되는 개념이므로 같이 알아보았다.
크리티컬 섹션(Critical Section)은 멀티스레드 프로그래밍에서 여러 스레드가 동시에 접근해서는 안 되는 공유 자원을 접근하는 코드 영역을 말한다. 크리티컬 섹션은 원자 단위로 실행되어야 하는 코드 섹션 또는 프로그램의 일부를 의미한다.
공유 리소스: 여러 스레드가 동시에 접근하는 데이터 구조, 변수 등을 보호
상호 제외: 한 번에 하나의 스레드만 실행 가능
동기화 메커니즘: 잠금, 세마포어, 뮤텍스 등을 사용
진입점 및 출구점: 공유 리소스 접근 시 잠금 획득 및 해제
데이터 일관성: 동시 접근 제한으로 데이터 무결성 유지
성능 영향: 동기화로 인한 오버헤드 발생
교착 상태: 부적절한 사용 시 발생 가능
경합 조건 방지: 경쟁 조건을 방지
성능 향상: 경합 감소로 성능 향상
코드 간소화: 멀티스레드 프로그램의 동작을 쉽게 추론
병목 현상: 한 번에 하나의 스레드만 접근 가능해 병목 발생
사용의 어려움: 올바른 사용이 어려움
높은 비용: 운영 체제의 관리 비용 발생
크리티컬 섹션 최소화: 필요한 코드만 포함하여 잠금 시간을 줄임
락 경합 줄이기: 자주 사용되지 않는 자원에 별도 락 사용
락 프리(lock-free) 알고리즘 사용: 락을 사용하지 않는 알고리즘 적용
재진입성(reentrant) 코드 작성: 크리티컬 섹션 내부에서 블로킹 호출을 피함
컨텐션 최소화: 낮은 우선순위 스레드가 오래 기다리지 않도록 설계
진짜 이번 키워드는 너무 어려운 키워드였다. 물론 머리로는 이해하지만 실제 코드를 보면서 공부를 하였는데
상당히 이해하기 어려운 내용이었다. 하지만 이전에 차근차근 해왔던 키워드들이 많은 도움이 되었다.