-1
在有人問我採訪的一個...信號燈隊列如何保護與多線程
Wait(semaphore sem) {
DISABLE_INTS
sem.val--
if (sem.val < 0){
add thread to sem.L
block(thread)
}
ENABLE_INTS
以上是信號燈等待執行(從其他線程複製)。 當多個線程嘗試入隊時(當它們無法獲得鎖定時),如何保護隊列sem.L?更新隊列之前我們是否鎖定?
對不起......我的問題是,當我們沒有得到鎖,我們嘗試將調用過程添加到隊列中。該隊列如何同步。我們是否爲該隊列加鎖? –
大衛已經解釋過了。只有一個核心,禁止中斷,不需要鎖定,因爲代碼不會被中斷,然後重新進入。我不明白David的答案,你需要一些計算機體系結構和操作系統內核功能的進一步知識。 –
@SureshChowta它與來自其他內核的訪問同步,因爲沒有其他內核。它通過禁止中斷與其他代碼在同一內核上運行同步 - 禁止中斷,不可能發生上下文切換,因爲只有中斷可觸發非自願的上下文切換。瞭解這一點需要了解如何在低級別管理併發性 - 而不是沒有內核編碼經驗的典型程序員的知識。問一個不需要內核開發知識的人是一個不好的問題。 –