信號量的疑惑

通常我們使用信號量用的都是操作系統的,使用的時候要用操作系統提供的函數創建信號量;  
  當你要進入你的互斥代碼之前,你需要嘗試阻塞信號量,如果這個時候信號量已經被阻塞,你的代碼就必須就此打住,等待別人釋放了你才能使用。使用完了就調用函數釋放信號量。當你釋放之後,別人被阻塞的任務得以調度之後就能夠繼續執行了,這就是“喚醒”。當然也有可能用戶已經殺掉該任務了  
   
  上述的應用情況就有兩種可能:  
  1、你寫的代碼是驅動程序(也就是說你的對信號量的操作在兩個進程都需要訪問的驅動程序裏頭),這個資源是互斥使用的。現在有兩個進程都要調用這個驅動(典型的:打印)。進程二使用你的代碼的時候,進程一已經使用你的代碼阻塞了信號量了,這個時候進程二隻好等着進程一結束來釋放信號量才能繼續  
  2、你寫的代碼不是驅動程序,你在進程一的用戶代碼裏面產生信息,這個過程需要的時間長短不能衡定,而你的進程二需要等到進程一產生了這些信息之後才能夠進行進一步的處理。於是,你在進程一產生信息之前阻塞信號量,然後進程一一心一意的產生信息,不用擔心進程二來干擾。產生完之後釋放了信號量,這個時候進程二纔能有效的被調度運行起來處理信息——這就是所謂的同步。  
   
  不管是互斥還是同步,使用的都是信號量的排他性  

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