728x90

교착상태의 발생

예를 들어 남자와 여자가 한 테이블에서 밥을 먹는 상황이라고 하고, 음식은 각자 하나씩 있고, 이유는 모르겠지만 포크와 나이프는 하나씩 밖에 없으며, 포크와 나이프 두개를 다 갖고있어야 음식을 먹을 수 있다고 해보자.

1. 운이 좋아서 포크와 나이프를 빨리 가져왔다면 내가 음식을 먹고 상대방에게 양보할 수 있을 것이다.

2. 내가 두개 전부 빨리 가져오지 못했다면 상대방이 다 먹기를 기다려야할 것이다.

이 두개의 케이스라면 그냥 기다리면 되는 것이기 때문에 문제가 없다. 하지만 내가 포크를 가져오고 상대방이 나이프를 가져갔다면? 상대방이 다 먹는걸 기다릴 수도 내가 음식을 먹을 수도 없는 상황이 펼쳐지고 이유도 영문도 모른채로 하염없이 기다리는 상황만 펼쳐지게 된다. 이러한 상황이 교착상태이다.

이게 코드 상에서는 lock을 잡아야하는 두개의 함수가 서로를 호출하게 되는 상황에서 발생할 수 있게 된다.

해결방법

1. 순서를 보장해준다. (먼저 실행되어야하는지 아닌지)

2. mutex의 id를 발급해서 순서를 보장해준다. (래퍼클래스사용 등)

3. Manager를 두고 자료구조를 이용해서 사이클이 발생하는지 판단한다.

 

728x90

'C++ > 멀티스레드' 카테고리의 다른 글

Event  (0) 2023.05.14
SpinLock  (0) 2023.05.14
Lock  (0) 2023.05.12
atomic  (0) 2023.05.12
쓰레드 생성  (0) 2023.05.12

+ Recent posts