排程器開鎖上鎖

2021-07-27 18:06:48 字數 850 閱讀 2232

給排程器上鎖函式osschedlock()

(程式清單l3.9)用於禁止任務排程,直到任務完成後呼叫給排程器開鎖函式osschedunlock()為止

,(程式清單l3.10)。呼叫osschedlock()的任務保持對cpu的控制權,儘管有個優先順序更高的任務進入了就緒態。然而,此時中斷是可以被識別的,中斷服務也能得到(假設中斷是開著的)。osschedlock()和osschedunlock()必須成對使用。變數oslocknesting跟蹤osschedlock()函式被呼叫的次數,以允許巢狀的函式包含臨界段**,這段**其它任務不得干預。μc/os-ⅱ允許巢狀深度達255層。當oslocknesting等於零時,排程重新得到允許。函式osschedlock()和osschedunlock()的使用要非常謹慎,因為它們影響μc/os-ⅱ對任務的正常管理。

當oslocknesting減到零的時候,osschedunlock()呼叫ossched[l3.10(2)]。osschedunlock()是被某任務呼叫的,在排程器上鎖的期間,可能有什麼事件發生了並使乙個更高優先順序的任務進入就緒態。

呼叫osschedlock()以後,使用者的應用程式不得使用任何能將現行任務掛起的系統呼叫。也就是說,使用者程式不得呼叫osmboxpend()、osqpend()、ossempend()、ostasksuspend(os_pr1o_self)、ostimedly()或ostimedlyhmsm(),直到oslocknesting回零為止。因為排程器上了鎖,使用者就鎖住了系統,任何其它任務都不能執行。

當低優先順序的任務要發訊息給多工的郵箱、訊息佇列、訊號量時(見第6章 任務間通訊和同步),使用者不希望高優先順序的任務在郵箱、佇列和訊號量沒有得到訊息之前就取得了cpu的控制權,此時,使用者可以使用禁止排程器函式。

併發程式設計 讀寫鎖上鎖流程

目錄 併發程式設計之讀寫鎖上鎖流程 一 寫鎖上鎖流程 二 讀鎖上鎖流程 寫鎖的上鎖流程 slf4j topic liheng public class rwlock2 finally t1 t1.start 寫鎖在加鎖的時候要麼鎖沒有被人持有則會成功,要麼鎖是重入 否則都失敗 protected f...

mysql 事件排程器 MySQL事件排程器

一 建立排程器 將資料庫按自定義的時間週期觸發某種操作,類似linux下的crontab 例項 建立排程器後的每個1小時觸發一次 create event myevent on schedule at current timestamp interval 1 hour doupdate mysche...

任務排程器

leetcode621 解題思路一 排序 規定n 1個任務為一輪,保證同一輪中乙個任務最多只能被安排一次。在每一輪中,將當前的任務按照它們剩餘的次數降序排序,並選擇剩餘次數最多的n 1個任務依次執行。如果任務的中種類t n 1,則只能選擇全部的t種任務,其餘時間空閒。也就是利用貪心,因為冷卻時間的存...