<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 閱讀(102) 評論(0)  編輯  收藏 所屬分類: 2016-thinking
    主站蜘蛛池模板: 亚洲综合小说另类图片动图| 亚洲视频在线免费播放| 亚洲AV无码一区二区三区网址 | 午夜dj在线观看免费视频| 亚洲国产高清美女在线观看 | 国产禁女女网站免费看| 亚洲国产成人综合精品| 国产一级一片免费播放| 蜜臀亚洲AV无码精品国产午夜.| 韩国免费三片在线视频| 日韩在线视频线视频免费网站| 免费观看日本污污ww网站一区| 狼色精品人妻在线视频免费| 国产成人精品亚洲精品| a国产成人免费视频| 亚洲综合精品一二三区在线| 国产麻豆视频免费观看| 亚洲av无码有乱码在线观看| 亚洲综合色在线观看亚洲| 国产午夜精品理论片免费观看| 亚洲激情视频在线观看| 成人免费看黄20分钟| 男女啪啪免费体验区| 国产l精品国产亚洲区在线观看| 久久精品免费视频观看| 亚洲天堂男人影院| 亚洲 另类 无码 在线| 国产免费拔擦拔擦8X高清在线人 | 亚洲爽爽一区二区三区| 99热这里有免费国产精品| 国产亚洲精品影视在线| 亚洲精品成人区在线观看| 亚洲一区免费观看| 亚洲va中文字幕| 人人狠狠综合久久亚洲88| 青青草免费在线视频| 巨胸喷奶水视频www免费视频| 亚洲免费视频播放| 亚洲精品视频免费观看| 色影音免费色资源| 国产精品免费久久|