deadlock 상황에 대해 질문이 있습니다.

글쓴이: 익명 사용자 / 작성시간: 목, 2018/09/20 - 10:40오전
인터넷을 뒤지다가 찾은 글인데..
케이스1.
전체 방에 대한 루프를 돌면서 각 방 정보를 접근하기: 우선 전체 방을 통제하는 CS를 lock하고 각 방에 대해서 lock/unlock을 반복합니다.
케이스2.
전체 방에 대한 루프를 돌면서 일부 방 정보를 접근하기: 우선 전체 방을 통제하는 CS를 lock하고 각 방에 대해서 일부 방에 대해서만 lock/unlock을 반복합니다.
이미 케이스 1과 케이스 2는 deadlock을 발생시킵니다.
이 상황에서 deadlock이 어떻게 발생하는건가요?
1차적으로 방 전체를 관리하는 CS로 다른 스레드의 접근을 막고
2차적으로 각 방을 관리하는 CS로 다른 스레드의 접근을 막는데
서로 다른 동기화 객체이기 때문에 데드락 상황이 아니지 않나요?
Forums:
곰곰이 고민해보니 이런 경우에는 생길거 같은데...
1번 스레드가 전체 방을 탐색하기 위해 전체 방 통제 CS를 잡고있고
2번 스레드에서는 4번 방을 수정하기 위해 4번 방 CS를 잡고 있는 상황일 때
2번 스레드에서 전체 방 통제 CS를 잡을 필요가 생겨서 대기하고
1번 스레드가 전체 방을 탐색하다가 4번 방의 CS를 잡으려고 할 때
이럴땐 데드락이 발생하겠지만... 각 방들이 전체 방을 건드려야 할 때가 있을까요??..
참고해보세요.
https://kldp.org/node/160178
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
감사합니다
잘 읽어보겠습니다!
참고해보세요.
문제 없는 방법
- 변수 하나당. CRITICAL_SECTION 사용
- 스레드 마다. 데이터 사용
- 스레드 이름을 각각 생성해서 사용
- 뮤텍스 : 전체 프로세스 중지 사용
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기