<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    http://blog.csdn.net/dong976209075/article/details/8004325

    理論上:

    mutex和spinlock都是用于多進程/線程間訪問公共資源時保持同步用的,只是在lock失敗的時候處理方式有所不同。首先,當一個thread 給一個mutex上鎖失敗的時候,thread會進入sleep狀態,從而讓其他的thread運行,其中就包裹已經給mutex上鎖成功的那個thread,被占用的lock一旦釋放,就會去wake up 那個sleep的thread。其次,當一個thread給一個spinlock上鎖失敗的時候,thread會在spinlock上不停的輪訊,直到成功,所以他不會進入sleep狀態(當然,時間片用完了,內核會自動進行調度)。


    存在的問題:

    無論是mutex還是spinlock,如果一個thread去給一個已經被其他thread占用的鎖上鎖,那么從此刻起到其他thread對此鎖解鎖的時間長短將會導致mutex和spinlock出現下面的問題。

    mutex的問題是,它一旦上鎖失敗就會進入sleep,讓其他thread運行,這就需要內核將thread切換到sleep狀態,如果mutex又在很短的時間內被釋放掉了,那么又需要將此thread再次喚醒,這需要消耗許多CPU指令和時間,這種消耗還不如讓thread去輪訊。也就是說,其他thread解鎖時間很短的話會導致CPU的資源浪費。

    spinlock的問題是,和上面正好相反,如果其他thread解鎖的時間很長的話,這種spinlock進行輪訊的方式將會浪費很多CPU資源。


    解決方法:

    對于single-core/single-CPU,spinlock將一直浪費CPU資源,如果采用mutex,反而可以立刻讓其他的thread運行,可能去釋放mutex lock。對于multi-core/mutil-CPU,會存在很多短時間被占用的lock,如果總是去讓thread sleep,緊接著去wake up,這樣會浪費很多CPU資源,從而降低了系統性能,所以應該盡量使用spinlock。


    現實情況:

    由于程序員不太可能確定每個運行程序的系統CPU和core的個數,所以也不可能去確定使用那一種lock。因此現在的操作系統通常不太區分mutex和spinlock了。實際上,大多數現代操作系統已經使用了混合mutex(hybrid mutex)和混合spinlock(hybrid spinlock)。說白了就是將兩者的特點相結合。


    hydrid mutex:在一個multi-core系統上,hybrid mutex首先像一個spinlock一樣,當thread加鎖失敗的時候不會立即被設置成sleep,但是,當過了一定的時間(或則其他的策略)還沒有獲得lock,就會被設置成sleep,之后再被wake up。而在一個single-core系統上,hybrid mutex就不會表現出spinlock的特性,而是如果加鎖失敗就直接被設置成sleep。


    hybrid spinlock:和hybrid mutex相似,只不過,thread加鎖失敗后在spinlock一段很短的時間后,會被stop而不是被設置成sleep,stop是正常的進程調度,應該會比先讓thread sleep然后再wake up的開銷小一些。


    總結:

    寫程序的時候,如果對mutex和spinlock有任何疑惑,請選擇使用mutex。




    原文參考:http://stackoverflow.com/questions/5869825/when-should-one-use-a-spinlock-instead-of-mutex

    posted on 2016-12-14 13:52 jinfeng_wang 閱讀(101) 評論(0)  編輯  收藏 所屬分類: 2016-thinking
    主站蜘蛛池模板: 亚洲熟妇色自偷自拍另类| 亚洲高清最新av网站| 亚洲欧洲日产国码www| 99国产精品免费观看视频| 亚洲乱码国产乱码精品精| a毛片免费全部播放完整成| 国产av无码专区亚洲av桃花庵| 在线播放国产不卡免费视频| 精品国产亚洲一区二区在线观看| 一边摸一边桶一边脱免费视频 | 亚洲乱码中文字幕久久孕妇黑人 | 久久久久久久久亚洲| 精品亚洲永久免费精品 | 婷婷亚洲久悠悠色悠在线播放| 中文字幕乱码免费看电影| 亚洲乱码日产一区三区| 免费国产黄网站在线观看| 久久亚洲精品成人AV| 成年女人毛片免费视频| 美女被爆羞羞网站在免费观看| 亚洲日韩中文字幕日韩在线| 日韩精品无码免费专区午夜| 亚洲精品国产电影午夜| 欧美大尺寸SUV免费| 色屁屁www影院免费观看视频 | 亚洲美女视频网站| 无码人妻一区二区三区免费 | 亚洲精品国产情侣av在线| 欧洲黑大粗无码免费| 羞羞视频免费观看| 国产精品亚洲一区二区三区在线| 亚洲黄色免费观看| 亚洲αⅴ无码乱码在线观看性色| 亚洲色一色噜一噜噜噜| 久久国产色AV免费看| 亚洲第一街区偷拍街拍| 国产亚洲一区二区在线观看| 91在线视频免费播放| free哆拍拍免费永久视频| 亚洲欧洲日本天天堂在线观看| 免费一级成人毛片|