답변

1

확실히. 그렇지 않은 경우 교착 상태에 대처할 필요가 없습니다. 시나리오는 차단 된 스레드가 다른 스레드가 획득하려고 시도하는 동기화 개체를 획득했기 때문입니다. 그것은 막을 것이다.

좋아요, 이제 질문을받습니다. 일반적으로 그렇습니다. 블로킹 조건을 해제하려면 다른 코드를 실행해야합니다. 명백하지 않은 경우는 스레드가 I/O에서 차단 된 경우 드라이버에서 코드를 실행하는 커널 스레드입니다. 또는 프로세서를 확보하기 위해 대기 중이거나 무제한 시간 초과로 대기 중이므로 스레드가 차단 된 경우 스레드 스케줄러.

+0

변명 내 그런 일이 나이 경우 possibility.i 물어 원한다면 뜻을 didnt expression..i 잘못된 : 스레드가있는 경우 차단되는 것은이 스레드가 동일한 프로세스 또는 해당 프로세스의 다른 스레드를 차단해야한다는 것인가? 매번 이런 일이 발생합니까? – Dchris

+0

@user :이 설명을 포함하도록 질문을 편집 할 수 있습니까? – Karmastan

+0

알겠습니다. 게시물이 업데이트되었습니다. –

1

예. 이것은 하나의 스레드가 다른 스레드가 어떤 작업을 수행 할 때까지 대기해야하는 모든 동기화 작업에서 발생할 수 있습니다. 예를 들어, 스레드 A가 잠금을 보유하고 커널에서 긴 차단 작업을 수행하면 잠금을 획득하려고 시도하면 다른 스레드 B가 차단됩니다. 스레드 B는 적어도 스레드 A의 블로킹 작업이 끝날 때까지 차단됩니다. 극단적 인 경우에

, 서로에 대기중인 스레드는 Deadlock

추가 설명이가 발생합니다 : 서로 독립적으로 프로세스 실행에

스레드. 하나의 스레드 차단이 다른 스레드를 반드시 차단하지 않아야합니다. 이것은 스레드가 처음 사용되는 주된 이유 중 하나입니다. 과정에서

-1

스레드가 차단되고, 그것은 또한 블록 모든 스레드

+0

아니요, 이것은 단순히 사실이 아닙니다. 교착 상태는 이미 게시 된 답변에 설명 된 경우에 발생합니다. 당신이 * 전혀 말하지 않기 때문에 그것은 자동적으로 일어나지 않습니다. –

관련 문제