1. 程式人生 > >華為內部面試題庫---(15)

華為內部面試題庫---(15)

  訊號量在建立時需要設定一個初始值,表示同時可以有幾個任務可以訪問該訊號量保護的共享資源,初始值為1就變成互斥鎖(Mutex),即同時只能有一個任務可以訪問訊號量保護的共享資源。一個任務要想訪問共享資源,首先必須得到訊號量,獲取訊號量的操作將把訊號量的值減1,若當前訊號量的值為負數,表明無法獲得訊號量,該任務必須掛起在該訊號量的等待佇列等待該訊號量可用;若當前訊號量的值為非負數,表示可以獲得訊號量,因而可以立刻訪問被該訊號量保護的共享資源。當任務訪問完被訊號量保護的共享資源後,必須釋放訊號量,釋放訊號量通過把訊號量的值加1實現,如果訊號量的值為非正數,表明有任務等待當前訊號量,因此它也喚醒所有等待該訊號量的任務。down函式用於獲得訊號量sem,它會導致睡眠,因此不能在中斷上下文(包括IRQ上下文和softirq上下文)使用該函式。該函式將把sem的值減1,如果訊號量sem的值非負,就直接返回,否則呼叫者將被掛起,直到別的任務釋放該訊號量才能繼續執行。