【原理】RT-Thread內部IPC之事件

事件也是線程間通訊的一種方式,可實現線程間同步。事件與信號量各有千秋,可用於不同的場景。

RT-Thread事件使用的是32位無符號整形變量來表示,每一位代表一個事件,線程通過“邏輯與”、“邏輯或”對一個或多個事件建立關聯。

 

事件與信號量不同的是:

1,可以實現一對多,多對多,多對一,例如,一次出遊,出遊前需要等待所有人員、裝備到齊,才能出發。而信號量只能實現一對一,當線程獲取到信號量,即可運行。

2,事件無排隊性,當發送的事件還沒有被線程讀走,再次發送同一事件,等效於發送一次;而每次釋放信號量,信號量會累加。

3,接受事件時,可設置是否清除對應的數據位;而獲取信號量,信號量(信號量大於0)會減一。

4,發送事件函數即使查詢到有線程恢復,仍查詢完所有掛起的線程;而釋放信號量函數,一旦查詢到符合的線程,則會立馬進行線程調度。

 

事件與信號量相同的是:

1,創建時,線程阻塞排序均可以選擇優先級 or FIFO方式。

2,線程阻塞時間均可以選擇直接返回、掛起一段時間、永久等待。

3,均可用於線程同步。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章