📄 mutex.cpp
字号:
/******************************************************************************
*******************************************************************************
** **
** Copyright (c) 2006 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
*******************************************************************************
******************************************************************************/
/**
* @file mutex.cpp
*
* $Revision: 1.7 $
*
* Implements a Mutual Exlusion (Mutex) object class
*
*/
#include <stdlib.h>
#include "mutex.h"
/**
*******************************************************************************
* Mutex::Mutex initialize members to known state
*
*******************************************************************************/
Mutex::Mutex ( void )
{
#if _MSC_VER
InitializeCriticalSection(&criticalSection);
#else
int result;
pthread_mutexattr_t criticalSectionAttributes;
pthread_mutexattr_init( &criticalSectionAttributes );
result = pthread_mutexattr_settype( &criticalSectionAttributes, PTHREAD_MUTEX_RECURSIVE );
VDVD_ASSERT_REPORT_ERROR( (result!=0), VDVD_ERROR_PLATFORM_FAILED );
pthread_mutex_init( &criticalSection, &criticalSectionAttributes );
#endif
}
/**
*******************************************************************************
* Mutex::Lock locks the mutex by entering a critical section.
*
* @return If the function succeeds, the return value is SUCCESS.
*******************************************************************************/
VDVD_ERROR Mutex::Lock( void )
{
#if _MSC_VER
EnterCriticalSection(&criticalSection);
#else
int result;
result = pthread_mutex_lock(&criticalSection);
VDVD_ASSERT_ERROR( (result!=0), VDVD_ERROR_PLATFORM_FAILED );
#endif
return ( VDVD_SUCCESS );
}
/**
*******************************************************************************
* Mutex::Unlock unlocks the mutex by leaving a critical section.
*
* @return If the function succeeds, the return value is SUCCESS.
*******************************************************************************/
VDVD_ERROR Mutex::Unlock( void )
{
#if _MSC_VER
LeaveCriticalSection(&criticalSection);
#else
int result;
result = pthread_mutex_unlock(&criticalSection);
VDVD_ASSERT_ERROR( (result!=0), VDVD_ERROR_PLATFORM_FAILED );
#endif
return ( VDVD_SUCCESS );
}
/**
*******************************************************************************
* AutoMutex::AutoMutex Locks the mutex in the constructor
* This class provides an automatic mechanism to take the mutex in a routine
* and release it when leaving the subroutine (to avoid writing the same error
* handling code to release the mutex before exiting over and over again)
*
*******************************************************************************/
AutoMutex::AutoMutex ( Mutex* pMutex )
{
VDVD_ERROR error = VDVD_SUCCESS;
VDVD_ASSERT_REPORT_ERROR( (pMutex==NULL), VDVD_ERROR_INVALID_PARAMETER );
m_pMutex = pMutex;
VDVD_REPORT_ERROR( m_pMutex->Lock() );
}
/**
*******************************************************************************
* AutoMutex::~AutoMutex Frees the mutex in the destructor
*
*******************************************************************************/
AutoMutex::~AutoMutex ( void )
{
VDVD_ERROR error = VDVD_SUCCESS;
VDVD_REPORT_ERROR( m_pMutex->Unlock() );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -