號誌的操作主要分成四種,我們就做個簡單的說明:
1.創建跟刪除號誌:主要分成create/delete兩種操作模式。
2.取得跟釋放號誌:主要分成aquire/release兩種操作模式。
3.沖洗任務等待列表的所有任務:flush為主要操作模式。
4.獲取號誌的資訊:show info顯示號誌的一般訊息/show blocked tasks 顯示訊號被凍結的任務ID列表
號誌有用的地方,我們後續會陸續的說明,我們先舉例在等待與號誌同步,號誌會如何處理,大家可以先設想,如果火車要從台北南下,到了竹南分山線跟海線時,此時,在竹南站時,就會出現一個號誌燈,讓火車暫停,如果是快車,例如自強號,他從台北出發時,就很確定要走山線,此時,慢車例如區間車,有可能從新竹出發才獲取走海線,相對的優先權就在快車自強號所取得。 我們就從這個邏輯思維來思考,
A.等待與號誌同步
tWaitTask() 自強號列車到竹南站取得優先行使權力
{
:
Acquire binary semaphore token 號誌燈會讓自強號先行,是早已經取得的權利
:
}
:
tSingalTask() 區間車到竹南站取得一個通行的機會
{
:
Release binary semaphore token 號誌會視狀況,如果自強號還未到,就有機會讓區間車先行,反之則需先停止,讓自強號先行
:
}
以上列舉其中一種,號誌其實很重要的一個觀念,我們從排程一直講到號誌,其實思考方式,是可以用生活上找到的東西來做詮釋,相信會比較好理解。明天我們繼續討論第二種號誌的使用模式。