• <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>

            MyMSDN

            MyMSDN記錄開(kāi)發(fā)新知道

            關(guān)于線程同步的一些總結(jié)(用戶模式/內(nèi)核模式)

            自旋鎖同步

            1. 一般是為了內(nèi)核態(tài)下各個(gè)派遣函數(shù)之間做同步作用的。
            2. 原理是(單CPU)將IRQL從軟件中斷提升到硬件中斷。PASSIVE_LEVEL->DISPATCH_LEVEL。因?yàn)樵贒ISPATCH_LEVEL中是不會(huì)出現(xiàn)線程切換的(只有高級(jí)別能打斷低級(jí)別,而低級(jí)別不能打斷高級(jí)別)。
            3. 因?yàn)榉猪?yè)內(nèi)存將導(dǎo)致如果線程切換的時(shí)候會(huì)引起分頁(yè)數(shù)據(jù)交換,數(shù)據(jù)交換是通過(guò)引發(fā)頁(yè)故障來(lái)實(shí)現(xiàn)的,而頁(yè)故障是不允許出現(xiàn)在DISPATCH_LEVEL中的,否則將引起系統(tǒng)崩潰(PASSIVE_LEVEL則允許)。驅(qū)動(dòng)程序的StartIO例程、DPC例程、中斷服務(wù)例程都運(yùn)行在DISPATCH_LEVEL或者更高的IRQL。因此這些例程不能使用分頁(yè)內(nèi)存,否則將導(dǎo)致系統(tǒng)崩潰。
            4. 自旋鎖在不同IRP之間同步的時(shí)候,則需要放在DeviceExtension中傳遞。

            互鎖

            1. 類似于number++; //匯編后將不止一條語(yǔ)句,非原子操作number--; //同上因?yàn)檎Z(yǔ)句會(huì)變成多句,在線程切換的時(shí)候,兩個(gè)線程下的該例程將會(huì)交織在一起執(zhí)行,導(dǎo)致錯(cuò)誤。可以:
              先加鎖
              number++;
              解鎖
              再加鎖
              number--;
              解鎖
              來(lái)實(shí)現(xiàn)兩句話的同步(按指定順序執(zhí)行,而不受到線程切換的影響)加鎖解鎖可以使用自旋鎖
            2. 在系統(tǒng)中提供了Interlocked***/ExInterlocked***實(shí)現(xiàn)

            信號(hào)燈同步

            1. 線程1關(guān)閉信號(hào)燈,以至于使用Wait****的時(shí)候,當(dāng)前線程處于暫停狀態(tài)。
            2. 線程2的作用就是在執(zhí)行結(jié)束后,點(diǎn)亮信號(hào)燈(增加計(jì)數(shù)器)。當(dāng)線程切換回來(lái)的時(shí)候,線程1就因?yàn)橛?jì)數(shù)器不是0而使信號(hào)燈處于激活狀態(tài),從而繼續(xù)執(zhí)行線程1。

            事件的同步

            (不能遞歸獲取互斥體)
            1. 主線程在輔助線程上設(shè)置了事件,如果不使用Wait**等待事件返回,則主線程可能直接執(zhí)行完畢了,而導(dǎo)致輔助線程還在執(zhí)行。
            2. 使用Wait****可以使主線程等待事件執(zhí)行完成。

            互斥體同步

            (允許遞歸獲取互斥體(得到互斥體的線程還可以再次獲得這個(gè)互斥體,或者說(shuō)互斥體對(duì)于已經(jīng)獲得互斥體的線程不產(chǎn)生“互斥”關(guān)系))
            1. 創(chuàng)建一個(gè)互斥體對(duì)象,將互斥體對(duì)象傳遞給多個(gè)線程。
            2. 在每個(gè)線程操作的步驟中,調(diào)用Wait*****,如果互斥體處于激活(內(nèi)部維護(hù)一個(gè)計(jì)數(shù)器),則繼續(xù)執(zhí)行后續(xù)代碼,并在調(diào)用結(jié)束后恢復(fù)互斥體Release****,這樣當(dāng)別的線程試圖使用互斥體后面的代碼的時(shí)候,因?yàn)榛コ怏w狀態(tài)未激活,則無(wú)法繼續(xù)執(zhí)行代碼。

            快速互斥體同步

            1. 與互斥體同步類似,唯一區(qū)別是不允許遞歸獲取互斥體

            posted on 2009-12-26 05:53 volnet 閱讀(2094) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 知識(shí)庫(kù)(KnowledgeLibrary)C/C++

            評(píng)論

            # re: 關(guān)于線程同步的一些總結(jié)(用戶模式/內(nèi)核模式)[未登錄](méi) 2011-05-09 10:22 harryshayne

            垃圾  回復(fù)  更多評(píng)論   

            # re: 關(guān)于線程同步的一些總結(jié)(用戶模式/內(nèi)核模式) 2011-05-10 08:35 憤青

            @harryshayne
            你蠻無(wú)聊的  回復(fù)  更多評(píng)論   

            特殊功能
             
            狠狠色丁香婷婷久久综合五月| 久久99国产亚洲高清观看首页| 狠狠88综合久久久久综合网| 九九久久自然熟的香蕉图片| 久久国产精品久久国产精品| 亚洲国产精品久久久久婷婷软件| 亚洲国产精品综合久久一线 | 97久久香蕉国产线看观看| 久久久久久国产精品免费免费| 香蕉久久av一区二区三区| 久久综合一区二区无码| 天天久久狠狠色综合| 99久久免费国产精品热| 欧美麻豆久久久久久中文| 内射无码专区久久亚洲| 国产V亚洲V天堂无码久久久| 欧美久久综合九色综合| 久久综合九色综合久99| 亚洲综合伊人久久综合| 日产精品久久久一区二区| 东方aⅴ免费观看久久av| 国产午夜精品理论片久久| 国产成人无码精品久久久免费| 久久国产乱子伦精品免费强| 亚洲欧美日韩久久精品| 精品人妻伦九区久久AAA片69| 午夜精品久久久久久中宇| 香蕉久久久久久狠狠色| 国产香蕉久久精品综合网| 精品久久久久中文字幕一区| 精品永久久福利一区二区 | 久久精品国产亚洲AV无码偷窥| 亚洲国产欧洲综合997久久| 久久AAAA片一区二区| 久久综合综合久久狠狠狠97色88| 99精品久久精品一区二区| 久久精品卫校国产小美女| 色狠狠久久AV五月综合| 亚洲国产精品一区二区久久hs | 久久精品国产精品国产精品污| 亚洲综合熟女久久久30p|