VC++中数据访问互斥的简单实现方法

在多线程存在的情况下,涉及数据读写的操作都要考虑互斥,这里介绍两种简单有效的方法。

一、利用全局变量做作互斥对象

//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(); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值