在多线程存在的情况下,涉及数据读写的操作都要考虑互斥,这里介绍两种简单有效的方法。
一、利用全局变量做作互斥对象
//define the mutex object.
#define MUTEX_NAME _T("Data_Access_Exclusive_Object")
static HANDLE g_hMutex = NULL;
//Create the mutex object.
if( !g_hMutex )
g_hMutex = ::CreateMutex( NULL, FALSE, MUTEX_NAME );
::WaitForSingleObject( g_hMutex, INFINITE );
//any operation on data.
::ReleaseMutex( g_hMutex );
//Release the mutex object
if( g_hMutex )
{
::CloseHandle( g_hMutex );
g_hMutex = NULL;
}
二、利用CCriticalSection,CSingleLock实现互斥
#include "afxmt.h" //This header file is needed.
//defination.
CCriticalSection m_csTest;
CSingleLock Lock (&m_csTest);
if(Lock.IsLocked()){
return;
}
Lock.Lock();
//any operation on data.
Lock.Unlock();
一、利用全局变量做作互斥对象
//define the mutex object.
#define MUTEX_NAME _T("Data_Access_Exclusive_Object")
static HANDLE g_hMutex = NULL;
//Create the mutex object.
if( !g_hMutex )
g_hMutex = ::CreateMutex( NULL, FALSE, MUTEX_NAME );
//The CreateMutex function creates or opens a named or unnamed mutex object.
//More details of this function please refer to MSDN.
//When access data::WaitForSingleObject( g_hMutex, INFINITE );
//any operation on data.
::ReleaseMutex( g_hMutex );
//Release the mutex object
if( g_hMutex )
{
::CloseHandle( g_hMutex );
g_hMutex = NULL;
}
二、利用CCriticalSection,CSingleLock实现互斥
#include "afxmt.h" //This header file is needed.
//defination.
CCriticalSection m_csTest;
CSingleLock Lock (&m_csTest);
if(Lock.IsLocked()){
return;
}
Lock.Lock();
//any operation on data.
Lock.Unlock();