c++互斥量Mutex

必须先知道的概念,

操作系统可以使多个任务并行执行,这被称为多线程的调度运行,简单地,虽然CPU只有一个程序运行指针,但是这个指针会按照操作系统分配的多个时间片,分别去取每个任务代码运行,任意时刻是一个线程在运行,但是总体上看像是多任务并行运行。

一个线程有4中状态:就绪,等待操作系统能有时间片分给它使用,就是Thread.start()之后;运行,CPU指针在该线程中运行,进入线程的响应函数中run();阻塞,当前没有办法在该线程中运行,比如Sleep(), 同步锁等;死亡,线程的响应任务执行完毕。

互斥量Mutex,就是进行线程间通信的一种手段,可以挂起线程,使线程阻塞。

为什么要挂起线程呢,主要是因为要独占资源,只能由当前获取了互斥量的线程访问,其他线程如果要访问同样的资源,需要使用互斥量加以控制。

1. 引用头文件<windows.h>

2. 创建Mutex,可以创建一个有名字的mutex,或者没有名字的mutex

HANDLE CreateMutexA(
  LPSECURITY_ATTRIBUTES lpMutexAttributes, //互斥体的一些属性,为NULL时,只在当前类使用
  BOOL                  bInitialOwner,  // true,有拥有者,false,没有拥有者
  LPCSTR                lpName  //互斥体的名字
);

3. 等待获取Mutex,INFINITE, 只有在获取到互斥体时返回WAIT_OBJECT_0,也就是阻塞线程

if (WaitForSingleObject(mutex, INFINITE) != WAIT_OBJECT_0)

4.释放Mutex,释放Mutex的权限,就是解锁。

ReleaseMutex(mutex)

5. 终止一个Mutex,不要了

CloseHandle((HANDLE)*mutex)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值