【转载】CSingleLock的使用方法(多线程)

转自:http://zyyoung.blog.sohu.com/100642344.html

 

CSingleLock

习多线程之三:线程同步--使用互斥
作者:惠州市东晓电子有限公司 龚辉斌

下载本文配套代码

互斥跟临界区很相似,便远比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。通过CMutex来完成线程间的互质,即:CMutex Mutext;
 

从而我们可以这样来定义数据对象:

 
 

class CDataArray
{
private:
int iArray[10];
CMutex Mutex;
public:
CDataArray(){};
~CDataArray(){};

void SetData(int iValue);
void GetDataArray(int aArray[10]);
};
成员函数实现如下:

void CDataArray::SetData(int iValue)
{
CSingleLock SingleLock(&Mutex);
SingleLock.Lock();
for (int i=0;i<10;i++)
iArray[i]=iValue;
}

void CDataArray::GetDataArray(int aArray[10])
{
CSingleLock SingleLock(&Mutex);
SingleLock.Lock();
for (int i=0;i<10;i++)
aArray[i]=iArray[i];
}

为了访问一个互斥对象,务必建立一个CSingleLock或CMultiLock对象,用于访问控制。如果互斥没有被线程占用,那么当前的调用线程可以成为互斥的占用者。要实现对互斥的访问,就要调用CSingleLock的成员函数Lock(),即:
SingleLock.Lock();
如果一个线程占用了互斥,那么系统将挂起当前的调用线程,直到这个互斥被释放为止,这时,被挂起的线程将被唤醒并取得对互斥的控制。
释放互斥是通过调用CSingleLock的成员函数UnLock()来实现的。CDataArray的成员函数在退出时,将自动进行解锁操作。因为CSingleLock被创建在椎栈上,系统自动完成对UnLock()的调用。

本文即本人在学习多任务多线程过程的手记,供大家参考,望能得到各位指点。
作者信箱:devvy@21cn.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值