본문 바로가기

반응형

DEADLOCK

(3)
데드락 회피 - 은행원 알고리즘 이전 포스트 : 데드락 회피에서는 데드락 회피의 개념, 안전 상태와 그렇지 않은 상태의 개념을 알아보았다. 그리고 데드락 회피를 구현하기 위한 자원 할당 그래프 알고리즘(Resource-Allocation Graph Algorithm)과 은행원 알고리즘(Banker's Algorithm)의 이론적인 측면들 또한 살펴 보았다. 오늘 포스트에서는 일정 금액이 있어야 사업을 마치고 상환을 할 수 있는 고객들에게 어떤 순서로 한정된 은행의 돈을 빌려 주고 돌려 받아야 모든 고객들의 요구를 만족 시킬 수 있는지 고민하는 은행원 알고리즘의 실제 예제를 만들어 봄으로써 은행원 알고리즘에 대한 이해도를 높이도록 한다. 잠깐! 시작하기 전에 본격적으로 시작하기 전에 은행원 알고리즘에 대해 잠깐 되짚어 보자. 은행원 알고..
[C++] 데드락 방지 락(deadlock free lock) - 순환 대기(Circular wait) 제거 들어가며 이전 글 데드락(Deadlock)에서 데드락이 발생하기 위해서는 상호 배제(Mutual Exclusion), 점유 대기(Hold and Wait), 비선점(Non-Preemption), 순환 대기(Circular Wait). 이 네가지 조건이 모두 충족되어야 한다고 이야기 했다. 예를 들어 두 유저간의 거래를 처리하는 서버가 있다고 가정하자. A가 B와의 거래를 요청 한다. 동시에 B가 A와의 거래를 요청한다. 서버는 스레드 1번에서 A->B의 거래를 위해 요청자인 A유저 객체의 lock을 설정한다. 동시에 스레드 2번에서 B->A의 거래를 위해 요청자인 B유저 객체의 lock을 설정한다. 스레드 1번은 A->B의 거래를 완료하기 위해 B유저 객체의 lock을 마저 설정 하려고 하지만 B유저 객..
데드락(Deadlock) 개념 정리 오늘 다뤄볼 내용은 이름만 들어도 프로그래머의 가슴을 답답하게 만드는 '데드락(Deadlock)'이다. 이 포스트를 통해서 우리는 데드락의 기본 개념, 데드락 발생 조건, 데드락 탐지, 데드락 방지, 데드락 회피, 데드락에서 벗어나는 법을 알아 볼 것이다. 데드락(Deadlock)이란? 멀티 프로그래밍 환경 또는 멀티 스레드 환경에서는 여러 프로세스 또는 스레드가 한정된 자원을 동시에 사용하기 위해 항상 경쟁 상태에 놓여 있다. 이 때, 어떠한 이유로든 프로세스가 필요한 자원을 획득하지 못하고 영원히 자원을 기다리는 상태로 남아 있는 것을 데드락이라고 한다. 어떻게 보면 자원을 획득하지 못하고 있다는 점에서 기아상태(starvation state)와 비슷하지만 이것은 영원히 헤어 나올 수 없는 상태라는 ..

반응형