日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

系统进程间的同步机制

發布時間:2025/3/21 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统进程间的同步机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說出你所知道的各類linux系統的各類同步機制(重點),什么是死鎖?如何避免死鎖

  linux系統的通訊機制,主要是指進程間通訊,其實通訊就是進程同步的手段。如果問進程間同步,見問題7,這里要說的linux系統的同步機制是講線程間的同步。?
  簡單總結一下。更多資料參考《unix環境高級編程》、《操作系統》。?
  互斥量?
  首先是最基礎的加鎖原語,互斥量。既確保同一時間只有一個線程訪問數據,通過在訪問共享資源前對互斥量加鎖,阻塞其他試圖再次加鎖的線程知道互斥鎖被釋放。互斥的具體實現有多種方法,例如開關中斷,使用原子的機器指令。?
  讀寫鎖?
  與互斥量類似,不過允許更高的并行性。讀寫鎖有三種狀態,讀模式的加鎖,寫模式的加鎖,不加鎖狀態。一次只有一個線程可以占有寫模式的讀寫鎖,但是可以多個線程可以同時占用讀模式的讀寫鎖。既讀模式下可以共享,寫模式下互斥。一般一個線程試圖以讀模式獲取鎖時,讀寫鎖通常會阻塞隨后的讀模式鎖請求。?
  條件變量?
  互斥量是加鎖原語,條件變量屬于等待原語,用于等待某個條件成立后喚醒阻塞的線程。條件變量與互斥量一起使用,條件本身由互斥量保護。Java Object內置了條件變量wait(),notify(),notifyAll()。   ?
  pthread_cond_wait(),pthread_cond_signal(),pthread_cond_broadcast(Unix),從函數的命名就可以看出其大致作用。?
  根據陳碩的總結,條件變量的正確使用方式:?
  對于wait端:?
  1.必須與mutex一起使用。?
  2.在mutex已上鎖時才能調用wait()。?
  3.把判斷布爾條件和wait()放到while循環中。?
  第三個條件主要是為了防止spurious wakeup,既虛假喚醒。因為pthread_conf_wait能被除了pthread_cond_signal(),pthread_cond_broadcast外的其他信號喚醒。需要再wait后再次檢查,同時也是為了避免錯過一次條件變量后永遠的等待下去。?
  對于signal端:?
  1.一定不要在mutex已經上鎖的情況下調用signal。?
  2.在signal之前一般要修改布爾表達式。?
  3.修改布爾表達式通常用mutex保護。?
  4.注意區分signal和broadcast:“broadcast通常用于表明狀態變化,signal通常用于表示資源可用”。?
  自旋鎖?
  自旋鎖與互斥量類似,但它不是通過休眠使進程阻塞,二是在獲取鎖之前一直處于忙等。既一直占用CPU資源直到鎖被釋放。?
  屏障?
  屏障主要用于多個線程之間的并行工作的協調。屏障允許每個線程等待,直到所有的合作線程都達到某個點,然后從該點繼續執行。?
  信號量?
  這個在《unix環境高級編程》中沒有提及,在《操作系統》中有論述。?
  信號量可作用與進程間合作,以及多線程的同步。?
  一個進程可以被迫在某一個位置停止,直到接收到某一個信號。為了發信號,需要使用一個稱為信號量的特殊變量,可以看做一個具有整數值得變量。其中只允許信號量取0和1的稱為二元信號量。非二元信號量常稱為計數信號量或一般信號量。?
  一般在信號量上定義三個操作:?
  1.一個信號量可以初始化成非負數。?
  2.semWait操作使信號量減1。如果值變為負數,則執行semWait的進程或線程被阻塞,否則繼續執行。?
  3.semSignal操作使信號量加1。如果值<=0,則被semWait阻塞的進程被解除阻塞。?
  信號量需要隊列保存阻塞在信號量上等待的進程。至于進程按什么順序移除,最公平的是先進先出,采用此策略的為強信號量。沒有規定順序的為弱信號量。?
  互斥量和二元信號量的主要區別在于互斥量的加鎖和解鎖必須由同一線程分別對應使用,信號量可以由一個線程釋放,另一個線程得到。至于用于互斥和用于同步的說法,十分牽強。?
  陳碩關于信號量的建議是不用。?
  因為可用條件變量加互斥量完全代替,另外還需要擔心計數值需要和自己的數據長度常常保持一致的問題。?
  死鎖?
  死鎖大概已經被講爛了,我也不想再搬運了。堅持使用Scoped Locking,死鎖的時候好檢測。?

  

? ?補充一個坑爹坑爹坑爹坑爹的問題:系統如何將一個信號通知到進程?

? ? ?前面講過信號了,為什么又問一遍?這個問題有什么特殊的地方么??
? ? ?內核給進程發送信號,是在進程所在的進程表項的信號域設置對應的信號的位。

? ? ? ? 更多:http://blog.csdn.net/joejames/article/details/37960873?

總結

以上是生活随笔為你收集整理的系统进程间的同步机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。