VirtualBox

忽略:
時間撮記:
2009-7-13 下午02:51:23 (15 年 以前)
作者:
vboxsync
訊息:

IPRT: RTSemSpinMutex implementation.

檔案:
複製 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Runtime/r3/generic/semspinmutex-r3-generic.cpp

    r21533 r21540  
    11/* $Id$ */
    22/** @file
    3  * IPRT - Fast Mutex, Generic.
     3 * IPRT - Spinning Mutex Semaphores, Ring-3, Generic.
    44 */
    55
    66/*
    7  * Copyright (C) 2006-2007 Sun Microsystems, Inc.
     7 * Copyright (C) 2006-2009 Sun Microsystems, Inc.
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    3838#include <iprt/alloc.h>
    3939#include <iprt/err.h>
     40#include <iprt/assert.h>
    4041#include <iprt/critsect.h>
    4142
    4243
    4344
    44 RTDECL(int) RTSemFastMutexCreate(PRTSEMFASTMUTEX pMutexSem)
     45RTDECL(int) RTSemSpinMutexCreate(PRTSEMSPINMUTEX phSpinMtx, uint32_t fFlags)
    4546{
     47    AssertReturn(!(fFlags & ~RTSEMSPINMUTEX_FLAGS_VALID_MASK), VERR_INVALID_PARAMETER);
     48    AssertPtr(phSpinMtx);
     49
    4650    PRTCRITSECT pCritSect = (PRTCRITSECT)RTMemAlloc(sizeof(RTCRITSECT));
    4751    if (!pCritSect)
     
    5054    if (RT_SUCCESS(rc))
    5155    {
    52         /** @todo pCritSect->fFlags |= RTCRITSECT_FLAGS_NO_NESTING; */
    53         *pMutexSem = (RTSEMFASTMUTEX)pCritSect;
     56        pCritSect->fFlags |= RTCRITSECT_FLAGS_NO_NESTING;
     57        *phSpinMtx = (RTSEMSPINMUTEX)pCritSect;
    5458    }
    5559    else
     
    5761    return rc;
    5862}
    59 RT_EXPORT_SYMBOL(RTSemFastMutexCreate);
     63RT_EXPORT_SYMBOL(RTSemSpinMutexCreate);
    6064
    6165
    62 RTDECL(int) RTSemFastMutexDestroy(RTSEMFASTMUTEX MutexSem)
     66RTDECL(int) RTSemSpinMutexDestroy(RTSEMSPINMUTEX hSpinMtx)
    6367{
    64     if (MutexSem == NIL_RTSEMFASTMUTEX)
     68    if (hSpinMtx == NIL_RTSEMSPINMUTEX)
    6569        return VERR_INVALID_PARAMETER;
    66     PRTCRITSECT pCritSect = (PRTCRITSECT)MutexSem;
     70    PRTCRITSECT pCritSect = (PRTCRITSECT)hSpinMtx;
    6771    int rc = RTCritSectDelete(pCritSect);
    6872    if (RT_SUCCESS(rc))
     
    7074    return rc;
    7175}
    72 RT_EXPORT_SYMBOL(RTSemFastMutexDestroy);
     76RT_EXPORT_SYMBOL(RTSemSpinMutexDestroy);
    7377
    7478
    75 RTDECL(int) RTSemFastMutexRequest(RTSEMFASTMUTEX MutexSem)
     79RTDECL(int) RTSemSpinMutexTryRequest(RTSEMSPINMUTEX hSpinMtx)
    7680{
    77     return RTCritSectEnter((PRTCRITSECT)MutexSem);
     81    return RTCritSectTryEnter((PRTCRITSECT)hSpinMtx);
     82
    7883}
    79 RT_EXPORT_SYMBOL(RTSemFastMutexRequest);
     84RT_EXPORT_SYMBOL(RTSemSpinMutexTryRequest);
    8085
    8186
    82 RTDECL(int) RTSemFastMutexRelease(RTSEMFASTMUTEX MutexSem)
     87RTDECL(int) RTSemSpinMutexRequest(RTSEMSPINMUTEX hSpinMtx)
    8388{
    84     return RTCritSectLeave((PRTCRITSECT)MutexSem);
     89    return RTCritSectEnter((PRTCRITSECT)hSpinMtx);
    8590}
    86 RT_EXPORT_SYMBOL(RTSemFastMutexRelease);
     91RT_EXPORT_SYMBOL(RTSemSpinMutexRequest);
    8792
     93
     94RTDECL(int) RTSemSpinMutexRelease(RTSEMSPINMUTEX hSpinMtx)
     95{
     96    return RTCritSectLeave((PRTCRITSECT)hSpinMtx);
     97}
     98RT_EXPORT_SYMBOL(RTSemSpinMutexRelease);
     99
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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