• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

교착상태 발생 가능성

22.09.28 18:39 작성 조회수 157

1

안녕하세요! 강의 수강 중 질문 있어 글을 남깁니다.

'교착상태의 다양한 발생 가능성' 부분을 보고 있습니다.

그 중 첫 번째가 '동기 작업이 현재의 쓰레드를 필요로 하는 경우'입니다. 이 부분은 3-2 강의를 참고해서 이해를 했는데요. 아래처럼 비동기로 작업을 보냈는데, 자신을 block시킨 global queue에 할당되어 교착된 상태입니다.

DispatchQueue.global().async {
	DispatchQueue.global().sync {
			...
	}
}

두 번째가 '앞선 작업이 현재 쓰레드를 필요로 하는 경우'인데요, 생각해보니 위의 케이스를 제외하고는 마땅한 경우가 떠오르지 않아서요! 혹시 첫 번째 상황과 같은 것을 의미하는지, 제가 설명한 부분이 맞는 말인지 궁금합니다.

 

감사합니다! :)

 

답변 1

답변을 작성해보세요.

1

아 네 냥쥐님!

일단 첫번째 내용 정확하게 이해 하셨어요. 이미지를 붙이신대로, 2번쓰레드에서 다시 작업을 2번쓰레드로 기다리겠다라고 보내니.. 교착상태가 일어나는 것이죠.

두번째는, '앞선 작업이 현재의 쓰레드를 필요로 하는 경우'인데.. 사실 너무 이론적인 내용이라.. 그냥 그런게 있나보다 하고 넘어가시면 될 것 같긴해요..! 저도 코드로 상황을 만들기는 조금 힘들 것 같고, 그냥 단순하게 예를 들어 어떤 함수 내부에서 2번쓰레드를 사용하고 있었는데.. 그 함수 내부에서 잠깐 3번쓰레드를 사용했다가 뭔가 다시 2번쓰레드를 쓰는 일이 일어나서.. (원래 있던 작업이 다시 현재 쓰레드를 사용하는 일이 발생해서) 이러지도 저러지도 못하고 실행이 안되는 그런 상황도 생길 수(?)는 있다... 이 정도로 생각하시고 넘어가시면 될 것 같아요..!ㅠㅠ
(사실 교착 상태라는 것이... 제가 처음에 이미지로 설명드린 것처럼 여러 쓰레드에서 2개의 자원을 서로 사용하려고 해서, 갑자기 아무일도 진행이 안되는.. 그런 모든 상황을 포함하는 것이기 때문에.. 꼭 몇가지 케이스가 정확하게 있다고 단정짓기는 힘들긴 합니다..ㅠ 여러 상황에서, 무언가 일이 겹치거나.. 쓰레드가 겹치거나, 메모리를 사용하려는 것이 겹치거나.. 이런 모든 상황적인 것을 다 포함하는 개념이라.. 그냥 그런 이론적인 것이 있나보구나 하고 가볍게 넘기셔도 될 것 같아요. ^^)

감사합니다..!

좋은 밤 되세요 :)