【SylixOS事件集實現原理】

1 事件集簡介

      事件集是一種線程間通訊方式,可有效處理線程與線程之間的資源生產與消費的同步問題。在SylixOS中事件集被定義爲ULONG類型,每一位代表一個事件,即一個事件集可以處理32個不同的事件。事件集提供了發送和等待事件的API,資源生產者在資源準備好後發送事件,資源消費者則等待接收事件,如圖 1.1所示。

圖 1.1 事件集

2 事件集數據結構

      SylixOS中事件集相關的數據結構主要有兩個,即事件集對象資源管理塊與事件集緩衝區。系統事先準備好固定數量的事件集緩衝區,當應用申請事件集時則從緩衝區中選取未使用的節點。事件集緩衝區由事件集對象資源管理塊管理,如圖 2.1所示。

圖 2.1 事件集結構

3 事件集創建流程

      事件集的創建流程本質上就是準備事件集控制節點的過程。首先檢查事件集緩衝區中是否有空餘位置,若已滿則返回錯誤。若還存在空餘位置則獲取此位置並按照接口參數要求配置此控制節點以備後用,如圖 3.1所示。

圖 3.1 事件集創建流程

4 事件集發送流程

      事件集發送流程首先需要在緩衝區中找到對應的事件集控制節點,然後按照接口參數的要求設置或清空對應的事件狀態位。當對應的事件狀態被修改後還需要檢查當前此事件集中是否有正在等待的線程。若有則判斷當前的修改是否滿足此線程的喚醒條件,滿足則喚醒此線程,即將線程加入就緒隊列中,如圖 4.1所示

圖 4.1 事件集發送流程

5 事件集接收流程

      在接收事件集時首先會判斷當前是否滿足激活條件,即是否有線程發送滿足條件的事件集。若沒有則線程會被阻塞,等待條件被滿足。線程阻塞可以設置超時時間,若此時間內沒有接收到滿足條件的事件集則返回超時標誌,如圖 5.1所示。

圖 5.1 事件集接收流程

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