中斷鎖與訊號量的一種使用場景

2021-09-27 11:24:24 字數 788 閱讀 3327

使用中斷鎖來操作臨界區的方法可以應用於任何場合,且其他幾類同步方式都是依賴於中斷鎖而實

現的,可以說中斷鎖是最強大的和最高效的同步方法。只是使用中斷鎖最主要的問題在於,在中斷關閉期

間系統將不再響應任何中斷,也就不能響應外部的事件。所以中斷鎖對系統的實時性影響非常巨大,當使

用不當的時候會導致系統完全無實時性可言(可能導致系統完全偏離要求的時間需求);而使用得當,則會

變成一種快速、高效的同步方式。

例如,為了保證一行**(例如賦值)的互斥執行,最快速的方法是使用中斷鎖而不是訊號量或互斥

量:/* 關 閉 中 斷 */

level = rt_hw_interrupt_disable();

a = a + value;

/* 恢 復 中 斷 */

rt_hw_interrupt_enable(level);

在使用中斷鎖時,需要確保關閉中斷的時間非常短,例如上面**中的 a = a + value; 也可換成另外

一種方式,例如使用訊號量:

/* 獲 得 信 號 量 鎖 */

rt_sem_take(sem_lock, rt_waiting_forever);

a = a + value;

/* 釋 放 信 號 量 鎖 */

rt_sem_release(sem_lock);

這段**在 rt_sem_take 、rt_sem_release 的實現中,已經存在使用中斷鎖保護訊號量內部變數的行

為,所以對於簡單如 a = a + value; 的操作,使用中斷鎖將更為簡潔快速。

訊號量與鎖的差別

訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作 大家都在semtake的時候,就阻塞在 而互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法訪問,直到這個執行緒unlock,其他的執行緒才開始可以利用這 個資...

訊號量與互斥鎖的區別

訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作 大家都在semtake的時候,就阻塞在 互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法訪問,直到這個執行緒unlock,其他的執行緒才開始可以利用這個資源。...

訊號量與互斥鎖的區別

儘管兩個概念有點類似,但是他們的側重點不一樣,不難看出,mutex是semaphore的一種特殊情況 n 1時 也就是說,完全可以用後者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨佔的情況下,還是採用這種設計。semaphore可以被抽象為五個操作 1.建立 create,...