最近我才知道睡眠在linux內核中的系統調用會暫停當前調用線程到掛起/阻塞狀態,這意味着他們不會使用CPU,直到提到的時間過去。 - 完全理解。LINUX系統中互斥和信號量是否「忙等待」?
現在來互斥和信號燈,
互斥鎖:
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版本「 by ABRAHAM SILBERSCHATZ
我的問題:
我知道忙等待是不是接近同步問題的有效途徑,但是從上面我所提到的代碼段有一個疑問,使用互斥和信號燈將在忙等待結束?? (雖然互斥和信號廣泛用於解決大多數系統問題)。
這inturn讓我覺得利用互斥&信號燈是不是解決同步問題的有效方式,因爲它會消耗CPU週期(因爲它不會導致while循環,而紡暫停狀態)。
要短:是否互斥體和信號量忙等待,而把等待線程的線程掛起狀態?
在此先感謝!!請在我的理解中錯誤地糾正我!
簡而言之,答案是肯定答案,不是,但比本書描述的要複雜得多。在[semaphores](https://0xax.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