VirtualBox

忽略:
時間撮記:
2007-5-9 下午04:28:03 (18 年 以前)
作者:
vboxsync
訊息:

A little experiment trying to get rid of the critsect contention in DevATA.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp

    r23 r2565  
    3434#include <iprt/asm.h>
    3535#include <iprt/assert.h>
     36#ifdef IN_RING3
     37# include <iprt/semaphore.h>
     38#endif
    3639
    3740
     
    107110        STAM_PROFILE_ADV_STOP(&pCritSect->s.StatLocked, l);
    108111# endif
    109     int rc = RTCritSectLeave(&pCritSect->s.Core);
    110     AssertRC(rc);
     112    RTSEMEVENT EventToSignal = pCritSect->s.EventToSignal;
     113    if (RT_LIKELY(EventToSignal == NIL_RTSEMEVENT))
     114    {
     115        int rc = RTCritSectLeave(&pCritSect->s.Core);
     116        AssertRC(rc);
     117    }
     118    else
     119    {
     120        pCritSect->s.EventToSignal = NIL_RTSEMEVENT;
     121        int rc = RTCritSectLeave(&pCritSect->s.Core);
     122        AssertRC(rc);
     123        LogBird(("signalling %#x\n", EventToSignal));
     124        rc = RTSemEventSignal(EventToSignal);
     125        AssertRC(rc);
     126    }
    111127
    112 #else
     128#else /* !IN_RING3 */
    113129    Assert(VALID_PTR(pCritSect));
    114130    Assert(pCritSect->s.Core.u32Magic == RTCRITSECT_MAGIC);
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette