상호 배제
1 | 특정 공유자원을 한 순간에 한 개의 프로세스만 사용할 수 있을 떄, 프로세스 하나가 공유 데이터에 접근하는 동안 다른 프로세스가 해당 데이터를 접근할 수 없게 하는 것 |
임계 구역(Critical Section)
프로그램 내에서 공유 자원(데이터 등)에 접근하는 코드 영역
여러 스레드가 동시에 임계 구역에 들어가면 데이터 일관성 문제가 발생할 수 있음.
진입 섹션(Entry Section)
스레드가 임계 구역에 들어가기 전에 실행되는 코드
이 섹션에서는 스레드가 임계 구역에 들어갈 수 있는지 확인하고, 상호 배제를 보장함.
퇴장 섹션(Exit Section)
스레드가 임계 구역을 떠난 후 실행되는 코드
임계 구역에 다른 스레드가 들어갈 수 있도록 함.
1 | import java.util.concurrent.locks.Lock; |
문제점
- 교착 상태(Deadlock): 두 개 이상의 스레드가 서로 상대방의 락을 기다리며 무한 대기 상태에 빠짐.
- 해결 방안: 락 순서를 부여하거나 타임아웃을 설정한다.
- 기아(Starvation): 특정 스레드가 지속적으로 임계 구역에 진입하지 못하는 문제 발생.
- 해결 방안: 공정한 락을 사용하거나 우선순위 할당을 한다.