최근에 나는 슬립 리눅스 커널에서 시스템 호출은 현재 호출 스레드를 일시 중지/차단 상태 인 상태로 일시 중단합니다. 즉, 언급 된 시간이 경과 할 때까지 CPU를 사용하지 않을 것임을 의미합니다. - 은 완벽하게 이해합니다..LINUX 시스템에서 뮤텍스와 세마포어가 "Busy wait"합니까?
acquire() {
while (!available)
; // busy wait --> my doubt
available = false;;
}
release() {
available = true;
}
세마포어 잠금 :
wait(S) {
while (S <= 0)
; // busy wait --> my doubt
S--;
}
signal(S) {
S++;
}
PS :
이제 뮤텍스와 세마포어,뮤텍스 잠금 오는이 코드 조각은 "운영 체제 개념에서 가져옵니다 -9th 에디션 "에 의해 ABRAHAM SILBERSCHATZ
내 질문 : 나는 바쁜 대기 동기화 문제를 접근 할 수있는 효율적인 방법이 아니다, 그러나 나는 위에서 언급 한 코드 조각에서 뮤텍스와 세마포어를 사용하는 것은 바쁜 대기에 끝날 것이라는 의심을 가지고 있음을 알고
?? () 대부분의 sysnc 문제를 해결하기 위해 널리 사용되는 뮤텍스 및 세마포어).
어떤 inturn은 CPU 사이클을 소비하는 것입니다 나를는 뮤텍스 & 세마포어를 사용하여 동기화 문제를 해결하기위한 효율적인 방법이 아니다는 것을 느끼게(오히려 while 루프에서 회전 일시 중단 된 상태로 이어질하지 않기 때문에).
짧게 :대기 스레드 스레드를 일시 중단 상태로두기보다는 뮤텍스 및 세마포어 사용 중 대기가 발생합니까 ??
미리 감사드립니다 !! !! 내 이해에 잘못되면 친절하게 나를 정정하십시오 !!
짧은 대답은 예와 아니오이지만 책이 설명하는 것보다 복잡합니다. [세마포어] (https://www.xls.gitbooks.io/linux-insides/content/SyncPrim/sync-3.html)와 [mutexes] (https : ///0xax.gitbooks.io/linux-insides)에서 약탈하십시오. /content/SyncPrim/sync-4.html). 긴 형식은 뮤텍스 나 세마포어가 획득되면 프리미티브가 해제 될 때까지 호출 스레드를 파킹합니다. 방금 방아쇠를 당기는 것이 훨씬 낫습니다. 방금 방아쇠를 당긴다면 매우 비효율적입니다. 다행히도 그렇지 않습니다. :-) – jszakmeister
@jszakmeister 비효율적 일뿐만 아니라 고장 났을 것입니다! – curiousguy
@curiousguy 매우 사실! – jszakmeister