✔️ Synchronized
1. Synchronized란?
- 동기화
- 하나의 객체에 여러 개의 객체가 동시에 접근해 처리하는 것을 막는 것
- 공유 데이터가 사용되어 동기화가 필요한
임계영역
에 동기화를 사용하여 여러 스레드가 동시에 접근하는 것을 금지함
예시)
synchronized void increase() {
cnt++;
System.out.println(cnt);
}
void increase() {
synchronized(this) {
cnt++;
}
System.out.println(cnt);
}
✔️ Deadlock
1. Deadlock이란?
- 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다리면서 무한 대기에 빠지는 상황
2. Deadlock 발생 조건
상호 배제
◦ 한 번에 한 프로세스만 해당 자원을 사용할 수 있음
점유 대기
◦ 자원을 최소 하나 보유하고 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 함
비선점
◦ 이미 할당된 자원을 강제로 빼앗을 수 없음
순환 대기
◦ 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 함
3. Deadlock 해결 방법
(1) 데드락 예방(Prevention)
- 자원의
상호 배제
조건 방지
◦ 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 함. 단, 추후 동기화 관련 문제 발생 가능성 있음
점유 대기
조건 방지
◦ 프로세스 실행에 필요한 자원을 한 번에 요구하고 허용할 때까지 작업 보류하여 다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 함
비선점
조건 방지
◦ 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 함
순환 대기
조건 방지
◦ 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 함
💡 데드락 예방은 시스템의 처리량이나 효율성을 떨어뜨리는 단점이 발생할 수 있음
(2) 데드락 회피(Avoidance) : 자원 할당 이후에도 시스템이 항상 Safe state에 있을 수 있도록 할당을 허용함
- 대표적인 예 -
은행원 알고리즘(Banker's Algorithm)
◦ 어떤 자원의 할당을 허용하는지에 관한 여부를 결정하기 전 대기 중인 다른 프로세스들이 Safe state에 들 수 있는지 여부 검사, 즉 교착 상태 가능성 조사
💡 Safe state
: 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 안정 상태
💡 Safe sequence
: 데드락이 발생하지 않는 순서
(3) 데드락 탐지(Detection) 및 회복(Recovery)
탐지 기법
◦ Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부 탐색
◦ 이외에도 자원 할당 그래프를 통해 탐지하는 방법이 있음
회복 기법
: 순환 대기에서 벗어나 데드락으로부터 회복하기 위한 방법
◦ 프로세스 1개 이상 중단시키기
◦ 자원 선점하기
해당 내용은 다음 블로그를 참고하였습니다.