• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0

            一 semaphore機(jī)制

            古老的信號量機(jī)制,80年代初,從System V體系中產(chǎn)生,稱為System v信號量。90年代,Posix標(biāo)準(zhǔn)確立,其中的信號量稱為posix信號量。當(dāng)前l(fā)inux系統(tǒng)支持這兩種信號量(man semget/ man sem_post)。System v信號量為有名信號量,可以用于多進(jìn)程間的互斥同步。posix信號量分有名和無名兩種,當(dāng)前l(fā)inux只支持無名信號量,可以用于多線程之間的互斥同步,通過共享內(nèi)存也可以用于多進(jìn)程之間。
            信號量屬于內(nèi)核級別的互斥同步機(jī)制,相關(guān)調(diào)用總是陷入內(nèi)核態(tài),屬于功能強(qiáng)大/重量級的實(shí)現(xiàn)。

               二 spinlock機(jī)制
            多核SMP的cpu流行后,出現(xiàn)的新的互斥同步機(jī)制。spinlock實(shí)現(xiàn)原理為用戶態(tài)循環(huán)嘗試機(jī)制,不陷入內(nèi)核態(tài)進(jìn)行線程切換。spinlock的原子性通過CAS(CompareAndSwap)原語實(shí)現(xiàn)。使用spinlock時,應(yīng)該保證保護(hù)區(qū)間內(nèi)代碼執(zhí)行迅速,不應(yīng)該存在io等耗時操作。
            多核系統(tǒng)下,針對可快速執(zhí)行的保護(hù)區(qū)使用用戶態(tài)循環(huán)嘗試機(jī)制,可以保證執(zhí)行線程不需要引起上下文切換即可快速執(zhí)行通過,這種機(jī)制也被形象的稱為lock-free機(jī)制。我們可以這樣理解:lock-free機(jī)制即為循環(huán)嘗試,spinlock是它的具體實(shí)現(xiàn)。

            spinlock的實(shí)現(xiàn)有多種,常見的有pthread_spin_lock,該spinlock無限制循環(huán)嘗試,在多核環(huán)境下并且保護(hù)區(qū)代碼執(zhí)行迅速時,執(zhí)行線程很快可以拿到鎖,但當(dāng)單核環(huán)境或者保護(hù)區(qū)代碼執(zhí)行慢速時,則會耗盡該線程擁有的時間片之后交出cpu,造成cpu的浪費(fèi)。另一常見的spinlock是boost智能指針中的實(shí)現(xiàn),進(jìn)行3次無間斷的循環(huán)CAS原語判斷,之后若再次失敗,則調(diào)用sleep族函數(shù),交出cpu執(zhí)行權(quán),待再次分配到cpu時間片后繼續(xù)進(jìn)行CAS原語判斷操作。


               三 mutex機(jī)制
            mutex屬于os之上的再次封裝實(shí)現(xiàn)。在linux2.6內(nèi)核上,線程庫為nptl,其中的mutex基于futex機(jī)制實(shí)現(xiàn),它的實(shí)現(xiàn)原理,簡單說就是spinlock+semaphore,首先使用spinlock嘗試,可以拿到鎖則直接向下執(zhí)行,拿不到鎖則執(zhí)行semaphore機(jī)制,陷入內(nèi)核態(tài),進(jìn)入線程切換。
            在多核環(huán)境下,當(dāng)mutex保護(hù)的代碼段內(nèi)無io操作,執(zhí)行很快時,大多數(shù)情況下通過spinlock都可拿到鎖,不需要陷入內(nèi)核態(tài)。


              四 為智能指針正名(boost)
            智能指針的引用計數(shù)僅僅為一個整型變量的增減,屬于執(zhí)行迅速的典型,使用spinlock機(jī)制保護(hù),最新boost版本中僅僅是spinlock,而非mutex。從性能角度說,使用智能指針的現(xiàn)象是cpu略微上升(循環(huán)嘗試導(dǎo)致),而并發(fā)量/單個請求的響應(yīng)時間并無明顯影響。proactor機(jī)制實(shí)現(xiàn)的網(wǎng)絡(luò)層,智能指針基本無法繞過,刻意避免帶來的只能是丑陋的代碼和維護(hù)量的上升。但線程之間盡量避免傳遞指針(智能指針),通過傳遞id等代替。
            智能指針有它使用的場景,不能濫用,也不能刻意避免。

            from:

            http://www.shnenglu.com/CppExplore/archive/2010/08/28/125067.html

            posted on 2010-08-30 12:10 chatler 閱讀(383) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
            <2009年11月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            国产成人精品久久亚洲| 欧美熟妇另类久久久久久不卡| 青青草原精品99久久精品66| 亚洲国产精品无码久久一线| 精品久久久久久久| 久久996热精品xxxx| 久久伊人精品一区二区三区| 久久久久久曰本AV免费免费| 精品亚洲综合久久中文字幕| 亚洲国产精品狼友中文久久久| 亚洲伊人久久精品影院| 久久99精品久久久久久野外| 久久香综合精品久久伊人| 精品国产一区二区三区久久| 性做久久久久久免费观看| 久久99热这里只有精品国产| 国产综合久久久久久鬼色| 亚洲欧美日韩久久精品| 亚洲国产精品婷婷久久| 日韩精品久久久久久免费| 午夜精品久久久久9999高清| 久久精品免费观看| 久久w5ww成w人免费| 久久九九有精品国产23百花影院| 久久精品国产一区二区| 高清免费久久午夜精品| 久久久久亚洲AV无码观看 | 一本色道久久88综合日韩精品| 久久精品中文闷骚内射| 久久久久久国产精品无码下载 | 亚洲一区中文字幕久久| 久久久精品人妻一区二区三区四| 一级做a爰片久久毛片免费陪| 国产精品久久久久一区二区三区 | 久久精品成人免费观看97| 中文字幕一区二区三区久久网站 | 久久久久久精品无码人妻| 久久精品国产精品亚洲精品 | 精品久久人人爽天天玩人人妻 | 亚洲国产精品婷婷久久| 国产精品青草久久久久福利99|