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

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            WaitForSingleObject 和 EnterCriticalSection 效率比較

            Microsoft Windows 平臺中兩種最常用的鎖定方法為 WaitForSingleObject EnterCriticalSectionWaitForSingleObject 是一個過載 Microsoft API,可用于檢查和修改許多不同對象(如事件、作業、互斥體、進程、信號、線程或計時器)的狀態。WaitForSingleObject 的一個不足之處是它會始終獲取內核的鎖定,因此無論是否獲得鎖定,它都會進入特權模式 (環路 0)。此 API 還進入 Windows 內核,即使指定的超時為 0,亦如此。此鎖定方法的另一不足之處在于,它一次只能處理 64 個嘗試對某個對象進行鎖定的線程。WaitForSingleObject 的優點是它可以全局進行處理,這使得此 API 能夠用于進程間的同步。它還具有為操作系統提供鎖定對象信息的優勢,從而可以實現公平性及優先級倒置。

            通過對關鍵代碼段實施 EnterCriticalSection LeaveCriticalSection API 調用,可以使用 EnterCriticalSection。此 API 具有 WaitForSingleObject 所不具備的優點,因為只有存在鎖定爭用時,才會進入內核。如果不存在鎖定爭用,則此 API 會獲取用戶空間鎖定,并且在未進入特權模式的情況下返回。如果存在爭用,則此 API 在內核中所采用的路徑將與 WaitForSingleObject 極其相似。在低爭用的情況下,由于 EnterCriticalSection 不進入內核,因此鎖定開銷非常低。

            不足之處是 EnterCriticalSection 無法進行全局處理,因此無法為線程獲取鎖定的順序提供任何保證。EnterCriticalSection 是一種阻塞調用,意味著只有線程獲得對此關鍵區段的訪問權限時,該調用才會返回。Windows 引入了 TryEnterCriticalSectionTryEnterCriticalSection 是一種非阻塞調用,無論獲得鎖定與否都會立即返回。此外,EnterCriticalSection 還允許開發人員使用自旋計數對關鍵區段進行初始化,在回退前線程會按此自旋計數嘗試獲取鎖定。通過使用 API InitializeCriticalSectionAndSpinCount,完成初始化。自旋計數可以在此調用中進行設置,也可以在注冊表中進行設置,以根據不同操作系統及其相應的線程量程對自旋進行更改。

            如果存在鎖定爭用,則 EnterCriticalSection WaitForSingleObject 都會進入內核。如果實現程度過高,從用戶模式到特權模式的轉換開銷將會非常大。

            EnterCriticalSection
            WaitForSingleObject API 調用在對使用數千個周期的運算進行鎖定時,通常不會影響性能。在這些情況下,鎖定調用本身的開銷不會如此突出。會導致性能降低的情況是粒度鎖定,獲得和釋放此鎖定要花費數百個周期。在這些情況下,使用用戶級別鎖定則非常有益。

            為了說明在低爭用的情況下 WaitForSingleObject 調用與 EnterCriticalSection 調用的開銷情況,我們分別在 1 個和 2 個線程上運行了內存管理鎖定內核
            。在低爭用的情況下,存在加速比 (WaitForSingleObject_Time / EnterCriticalSection_Time) 大約為 5 倍的性能之差。在 2 個線程持續爭用的情況下,使用 EnterCriticalSection 和使用 WaitForSingleObject 之間的差別最小。在低爭用的情況下存在性能差距的原因如下:WaitForSingleObject 在每次調用時都進入內核,而 EnterCriticalSection 只有當存在鎖定爭用時,才進入內核。

             

            posted on 2009-09-14 12:58 肥仔 閱讀(1468) 評論(0)  編輯 收藏 引用 所屬分類: Windows開發

            国产精品久久久香蕉| 亚洲色大成网站WWW久久九九| 三上悠亚久久精品| 人妻无码αv中文字幕久久| 一本色道久久88精品综合| 久久久一本精品99久久精品66 | 国产精品成人99久久久久| 中文字幕亚洲综合久久| 久久精品亚洲AV久久久无码| 久久精品国产AV一区二区三区| 亚洲成色www久久网站夜月| 久久精品国产99国产电影网| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 亚洲乱码日产精品a级毛片久久| 亚洲欧美成人综合久久久| 国内精品久久国产大陆| 亚洲综合久久夜AV | 99久久精品毛片免费播放| 欧洲国产伦久久久久久久 | 日韩亚洲国产综合久久久| 久久国产免费观看精品3| 久久久精品波多野结衣| 97久久久久人妻精品专区| 久久乐国产综合亚洲精品| 国产巨作麻豆欧美亚洲综合久久| 国产亚洲美女精品久久久2020| 国产农村妇女毛片精品久久| 久久久无码一区二区三区| 久久精品视频一| 国产成人99久久亚洲综合精品| 久久亚洲精品成人av无码网站| 一级女性全黄久久生活片免费 | 久久青青国产| 99久久精品国产一区二区蜜芽| 久久久精品国产免大香伊| 中文字幕无码久久精品青草| 精品久久久久久久久久久久久久久| 成人国内精品久久久久影院| 久久精品午夜一区二区福利| 久久久久AV综合网成人| 中文精品久久久久人妻不卡|