訊號量是vxworks提供的最常用,最快速的一種任務間通訊機制。vxworks中訊號量有三種:二值訊號量,互斥訊號量,計數訊號量。下面一一介紹這三種訊號量的作用與區別。
訊號量通常的作用就是是控制任務的同步與互斥,
控制同步:任務1中等待訊號量x,當任務2中提供訊號量後觸發任務1繼續執行
void foointask1()
void foointask2()
控制互斥:先通過先鎖定某訊號量,在臨界區**結束後釋放該訊號量。當然這裡必須保證開始時該訊號量是可用的。
void foob()
而在達成這些目標時這三種訊號量又有如下區別。
二值訊號量,是這三種中最通用,最快速的方式。通過sembcreate建立,可以同時支援同步和互斥的控制。當用作同步時,一般建立時設定為不可用(sem_empty),而當用作互斥時,則再建立時一般設定為可用(sem_full)。
互斥訊號量,屬於一種特殊的二值訊號量,一般都被用於控制互斥訪問,同時支援優先順序繼承,任務刪除安全等選項。互斥訊號量與二值相比有如下不同:
1. 通過semmcreate建立時,初值為可用
2. 對互斥訊號量,semtake和semgive總是成對出現
3. 不可使用semflush來釋放訊號
4. 在建立時可以選擇是否支援優先順序繼承,任務刪除安全等特性。(優先順序繼承是為了防止優先順序反轉,任務刪除安全是通過tasksafe和taskunsafe來保證執行在臨界區內時不會被意外刪除)
計數訊號量,也就是支援計數的二值訊號量,它會對訊號量的釋放次數進行跟蹤,每次釋放計數器加1,每次獲取則減1,當計數值為0時試圖獲取訊號量的任務被阻塞。它由semccreate來建立。
最後在說明下再建立訊號量時,都可以指定型別為sem_q_priority
或 sem_q_fifo
,當多個任務同時等待
sem_q_priority
型別的訊號量時,當訊號量來臨,優先順序更高的任務會獲得訊號量被觸發,而
sem_q_fifo
型別的話,則是最先開始等待的任務獲得。
VxWorks系列 任務間同步與通訊之訊號量
訊號量是vxworks提供的最常用,最快速的一種任務間通訊機制。vxworks中訊號量有三種 二值訊號量,互斥訊號量,計數訊號量。下面一一介紹這三種訊號量的作用與區別。訊號量通常的作用就是是控制任務的同步與互斥,控制同步 任務1中等待訊號量x,當任務2中提供訊號量後觸發任務1繼續執行 void fo...
VxWorks任務間通訊
1.共享記憶體 雙向鍊錶 環形緩衝 2.互斥 中斷鎖 作用域僅限於中斷內部。優先順序鎖 共享記憶體中,低優先順序的任務不允許被打斷,優先順序鎖就被使用。弊端 會完全禁止任務的排程。3.訊號量 一種指向semaphore結構的指標 sem eventsend err notify,釋放訊號量出錯返回錯...
中斷與任務 vxworks
分類 中斷處理是整個執行系統中優先順序最高的 可以搶占任何任務級 執行。中斷機制是多工環境執行的基礎,是系統實時性的保證。幾乎所有的實時多工作業系統都需要乙個週期性系統時鐘中斷的支援,用以完成時間片排程和延時處理。vxworks 提供tickannounce 由系統時鐘中斷呼叫,周期性地觸發核心。為...