核心態訊號量(todo)

2021-09-21 15:48:56 字數 667 閱讀 2143

void sema_init (struct semaphore *sem, int val);

void init_mutex (struct semaphore *sem); //將sem的值置為1,表示資源空閒

void init_mutex_locked (struct semaphore *sem); //將sem的值置為0,表示資源忙

void down(struct semaphore * sem);

該函式用於獲得訊號量sem,它會導致睡眠,因此不能在中斷上下文(包括irq上下文和softirq上下文)使用該函式。該函式將把sem的值減1,如果訊號量sem的值非負,就直接返回,否則呼叫者將被掛起,直到別的任務釋放該訊號量才能繼續執行。

int down_interruptible(struct semaphore * sem);

該函式功能與down類似,不同之處為,down不會被訊號(signal)打斷,但down_interruptible能被訊號打斷,因此該函式有返回值來區分是正常返回還是被訊號中斷,如果返回0,表示獲得訊號量正常返回,如果被訊號打斷,返回-eintr。

int down_trylock(struct semaphore * sem); // 非阻塞函式,不會睡眠。無法鎖定資源則馬上返回

void up(struct semaphore * sem);

讀寫訊號量(todo)

讀寫訊號量的相關api有 declare rwsem name 該巨集宣告乙個讀寫訊號量name並對其進行初始化。void init rwsem struct rw semaphore sem 該函式對讀寫訊號量sem進行初始化。void down read struct rw semaphore ...

核心 訊號量

核心訊號量和自旋鎖類似,作用也是保護資料。不同之處是,程序獲取核心訊號量嘚瑟時候,如果不能獲取,則程序進入睡眠狀態。down dev sem up dev sem 核心訊號量和自旋鎖的不同 1 核心訊號量 不能用在 中斷處理函式 和 tasklet 等不可睡眠的場景 2 深層次的原因 linux核心...

Linux核心 訊號量

linux訊號量是一種睡眠鎖。如果有乙個任務試圖獲得乙個不可用 已經被占用 的訊號量時,訊號量會將其推入乙個等待佇列,然後讓其睡眠。這時處理器可以重獲自由,從而去執行其他 當持有的訊號量可用 被釋放 後,處於等待佇列中的那個任務被喚醒,並獲得該訊號量。舉例說明 當某個人來到門前,他抓取鑰匙,進入房間...