事件也是線程間通訊的一種方式,可實現線程間同步。事件與信號量各有千秋,可用於不同的場景。
RT-Thread事件使用的是32位無符號整形變量來表示,每一位代表一個事件,線程通過“邏輯與”、“邏輯或”對一個或多個事件建立關聯。
事件與信號量不同的是:
1,可以實現一對多,多對多,多對一,例如,一次出遊,出遊前需要等待所有人員、裝備到齊,才能出發。而信號量只能實現一對一,當線程獲取到信號量,即可運行。
2,事件無排隊性,當發送的事件還沒有被線程讀走,再次發送同一事件,等效於發送一次;而每次釋放信號量,信號量會累加。
3,接受事件時,可設置是否清除對應的數據位;而獲取信號量,信號量(信號量大於0)會減一。
4,發送事件函數即使查詢到有線程恢復,仍查詢完所有掛起的線程;而釋放信號量函數,一旦查詢到符合的線程,則會立馬進行線程調度。
事件與信號量相同的是:
1,創建時,線程阻塞排序均可以選擇優先級 or FIFO方式。
2,線程阻塞時間均可以選擇直接返回、掛起一段時間、永久等待。
3,均可用於線程同步。