⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxmutexlock.h

📁 linux下的一款播放器
💻 H
📖 第 1 页 / 共 2 页
字号:
/* ***** BEGIN LICENSE BLOCK ***** * Source last modified: $Id: hxmutexlock.h,v 1.3.30.3 2004/07/09 01:45:12 hubbe Exp $ *  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved. *  * The contents of this file, and the files included with this file, * are subject to the current version of the RealNetworks Public * Source License (the "RPSL") available at * http://www.helixcommunity.org/content/rpsl unless you have licensed * the file under the current version of the RealNetworks Community * Source License (the "RCSL") available at * http://www.helixcommunity.org/content/rcsl, in which case the RCSL * will apply. You may also obtain the license terms directly from * RealNetworks.  You may not use this file except in compliance with * the RPSL or, if you have a valid RCSL with RealNetworks applicable * to this file, the RCSL.  Please see the applicable RPSL or RCSL for * the rights, obligations and limitations governing use of the * contents of the file. *  * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL") in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your version of * this file only under the terms of the GPL, and not to allow others * to use your version of this file under the terms of either the RPSL * or RCSL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient may * use your version of this file under the terms of any one of the * RPSL, the RCSL or the GPL. *  * This file is part of the Helix DNA Technology. RealNetworks is the * developer of the Original Code and owns the copyrights in the * portions it created. *  * This file, and the files included with this file, is distributed * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET * ENJOYMENT OR NON-INFRINGEMENT. *  * Technology Compatibility Kit Test Suite(s) Location: *    http://www.helixcommunity.org/content/tck *  * Contributor(s): *  * ***** END LICENSE BLOCK ***** *//* *  Non-reentrant mutexes for various server platforms. *//*********************************************************************** *  THIS CODE IS HIGHLY CRITICAL TO THE SERVER'S STABILITY!!! *  DO NOT MAKE CHANGES TO THE ATOMIC OPERATORS OR TO THE *  MUTEX CODE WITHOUT A SERVER TEAM CODE-REVIEW! (dev@helix-server) *//*********************************************************************** * *  Platforms supported: *    Windows / x86 *    Solaris / sparc  *    IRIX / MIPS *    AIX / PowerPC *    Tru64(OSF) / Alpha *    HP-UX / PA-RISC *    HP-UX / Itanium *    Misc. Unix / x86  (Linux, FreeBSD...) * *  XXXDC: So far, in nearly all cases, native mutexes provided by *  OS vendors have been buggy and/or very slow.  Well-written  *  assembly-language mutexes are strongly preferred. *  Be especially careful about byte-alignment issues. * *//*********************************************************************** * * Externally-available routines: * * inline void HXMutexLock(HX_MUTEX pLock, BOOL bWait = FALSE) *     Locks the mutex, blocking until available;  A delay *     between attempts to grab the lock is used if bWait is TRUE. *     Note that the default is a tight no-delay spinlock, so *     always set bWait to TRUE unless you know you should do otherwise. * * inline BOOL HXMutexTryLock(HX_MUTEX pLock) *     Locks the mutex if available, returning TRUE if the lock succeeded, *     and returning FALSE otherwise. * * inline void HXMutexUnlock(HX_MUTEX pLock) *     Unlocks the mutex. * * inline HX_MUTEX HXMutexCreate() *     Creates the mutex. * * inline void HXMutexInit(HX_MUTEX pLock) *     Initializes the mutex. * * inline void HXMutexDestroy(HX_MUTEX pLock) *     Destroys the mutex. * * *  Additionally, this file defines IHXMutex, a COM wrapper for the above. * * * NOTES: * The older HXxxxMutex variations of the above are depreciated * and should be converted over the the above variations for consistancy. * HXMutexUnInit() is also depreciated, it never did anything and * the purpose of it has been lost.  It appears useless. * *//*********************************************************************** * * On most platforms the above are implemented using the * following internal routines/#defines (do NOT call these directly!): * * int _HXMutexSetBit(HX_MUTEX pLock) *     Lock the lock and return the old value of the lock *     (0 meaning it was unlocked and is now locked, non-zero otherwise) * * _HXMutexClearBit(pLock)     *     Clears the mutex flag. * * BOOL _HXMutexYieldCPUIfNeeded() *     On some platforms we have to explicitly yield the CPU. *     This is not needed on most platforms. * * void _HXMutexInitBit(HX_MUTEX pLock) *     Initializes the mutex, typically just calls _HXMutexClearBit(). * * void _HXMutexDestroyBit(HX_MUTEX pLock) *     Destroys the mutex, typically does nothing. */#ifndef _HXMUTEXLOCK_H_#define _HXMUTEXLOCK_H_/*********************************************************************** * Common defines/includes *///system#include  <stdio.h>//include#include "hxtypes.h"#include "hxengin.h"//hxmisc#include "microsleep.h"/*********************************************************************** * OSF(Tru64) / Alpha defines/includes */#if defined _OSF1#include <alpha/builtins.h>typedef struct{   char          p;   unsigned long for_alignment;} _HXMutexLockType;#define HX_MUTEX volatile _HXMutexLockType* volatile#define HX_MUTEX_TYPE volatile _HXMutexLockType#define HX_MUTEX_BASE_TYPE _HXMutexLockType/*********************************************************************** * HP-UX / Itanium defines/includes */#elif defined _HPUX && defined _IA64#define HX_MUTEX volatile int* volatile#define HX_MUTEX_TYPE volatile int#define HX_MUTEX_BASE_TYPE int/*********************************************************************** * HP-UX / PA-RISC defines/includes */#elif defined _HPUXextern "C" {    int load_and_clear(volatile char* volatile p);};typedef struct{    char      p;    long long for_alignment;} _HXMutexLockType;#define HX_MUTEX volatile _HXMutexLockType* volatile#define HX_MUTEX_TYPE volatile _HXMutexLockType  #define HX_MUTEX_BASE_TYPE _HXMutexLockType  // for 64-bit or 32-bit#define alignedaddr(x) (volatile int *)((PTR_INT)(x) + 15 & ~0xf)#define release_spinlock(LockArea)  if (1) {  \     (*alignedaddr(LockArea) = 1); }/*********************************************************************** * AIX / PowerPC defines/includes */#elif defined _AIX#include <errno.h>// NATIVE MUTEX#include <sys/mman.h>#define HX_MUTEX msemaphore*#define HX_MUTEX_TYPE msemaphore#define HX_MUTEX_BASE_TYPE msemaphore// ASSEMBLY MUTEX//#define HX_MUTEX volatile int* volatile//#define HX_MUTEX_TYPE volatile int//#define HX_MUTEX_BASE_TYPE int/*********************************************************************** * IRIX / MIPS defines/includes */#elif defined _IRIX#include <abi_mutex.h>#define HX_MUTEX abilock_t*#define HX_MUTEX_TYPE abilock_t#define HX_MUTEX_BASE_TYPE abilock_t/*********************************************************************** * Windows x86 defines/includes */#elif defined _WIN32#include <winbase.h>#define HX_MUTEX volatile int* volatile#define HX_MUTEX_TYPE volatile int#define HX_MUTEX_BASE_TYPE int/*********************************************************************** * generic defines/includes */#else#define HX_MUTEX volatile int* volatile#define HX_MUTEX_TYPE volatile int#define HX_MUTEX_BASE_TYPE int#endif/*********************************************************************** * misc globals * * TODO: analyze more closely what the optimal delay is. */#ifndef HX_MUTEX_DELAY#define HX_MUTEX_DELAY 10000#endif// Backoff Configs// XXXDC - Needs to be fine-tuned on a platform-specific basis!!!// XXXDC - highly experimental!#ifdef XXXDC_USE_BACKOFF#define BACKOFF_THRESHOLD  5     // # failed locks before delay starts#define BACKOFF_START      100   // usec to initially delay#define BACKOFF_FACTOR     10    // muliply each delay by this#define BACKOFF_MAX        15000 // maximum usec to delay#endif/***********************************************************************//*********************************************************************** * Windows x86 * * Implementation Notes: *   Uses assembly mutex */#if defined _WIN32#define _HXMutexYieldCPUIfNeeded() /* not needed */#define _HXMutexInitBit(pLock)     _HXMutexClearBit(pLock)#define _HXMutexDestroyBit(pLock)  /* not needed */#define _HXMutexClearBit(pLock)    (*(pLock) = 0)inline static int_HXMutexSetBit(HX_MUTEX pLock){    register int nOldBit;    _asm    {        mov eax, 1        mov ebx, pLock        xchg dword ptr [ebx], eax        mov nOldBit, eax    }    return nOldBit;}/*********************************************************************** * Solaris / sparc / gcc * * Implementation Notes: *   Uses assembly mutex *   GCC inline-assembly syntax */#elif defined _SOLARIS && defined __GNUC__#define _HXMutexYieldCPUIfNeeded() /* not needed */#define _HXMutexInitBit(pLock)     _HXMutexClearBit(pLock)#define _HXMutexDestroyBit(pLock)  /* not needed */#define _HXMutexClearBit(pLock)    (*(pLock) = 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -