线程同步-互斥量

来源:互联网 发布:微信收红包网络出错 编辑:程序博客网 时间:2024/06/05 06:36
 

   2.互斥量(Mutex)
 A synchronization object that allows one thread mutually exclusive access to a resource. Mutexes are useful when only one thread at a time

can be allowed to modify data or some other controlled resource. For example, adding nodes to a linked list is a process that should only be allowed

by one thread at a time.
 是用于串行化访问资源的全局对象。我们首先设置互斥对象,然后访问资源,最后释放互斥对象。在设置互斥对象时,如果另一个线程(或进程)试图设置相同

的互斥对象,该线程将会停下来,直到前一个线程(或进程)释放该互斥对象为止。注意它可以由不同应用程序共享。
 互斥量表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的

临界段代码并且在共享同步使用的资源。
 Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。Mutex对象的值,只有0和1两个值。这两个值也分别代表了Mutex的两种

状态。值为0, 表示锁定状态,当前对象被锁定,用户进程/线程如果试图Lock临界资源,则进入排队等待;值为1,表示空闲状态,当前对象为空闲,用户进程/线程可以

Lock临界资源,之后Mutex值减1变为0。 
 Mutex被创建时可以有初始值,表示Mutex被创建后,是锁定状态还是空闲状态。在同一个线程中,为了防止死锁,系统不允许连续两次对Mutex加锁(系统一般会

在第二次调用立刻返回)。也就是说,加锁和解锁这两个对应的操作,需要在同一个线程中完成。 

优点:
 在单个进程类,实现了线程互斥,允许多个进程同时访问
缺点:
 和临界区相比速度较慢

使用方法如下:
互斥锁

VC可使用 CMutex参见atlmfc\include\afxmt.h