一、创建互斥同步对象
被创建时,默认是解锁状态。
- create_mutex ( : : AttribName, AttribValue : MutexHandle )
复制代码 互斥体是一个同步对象,它协商单个进程的线程之间的互斥,以避免全局变量等公共资源的同时修改。互斥体有两种可能的状态:
未锁定,即不被任何线程拥有,以及锁定,即被某个线程拥有。
试图锁定的线程已经被另一个线程拥有(即锁定)的互斥体,等待直到拥有线程首先解锁互斥体。
与事件(create_event)不同,线程必须拥有一个互斥体来解锁它。
它将根据AttribName属性名称和AttribValue属性值来创建分配和初始化互斥体。
主要有以下几种类型:
1. '' 空字符串,设置默认属性;
2. 'type' 类型,指定如果一个线程试图锁定一个已经拥有的互斥锁会发生什么:
2.1. 'sleep' 暂停调用线程(默认)。如果线程已经是互斥体的所有者,那么行为是未定义的。
2.2. 'spin' 一个快速互斥体实现,它正忙于等待发出信号的互斥体。如果线程已经是互斥体的所有者,那么行为是未定义的。
2.3. 'recursive' 如果线程不是互斥体的所有者,则“递归”会挂起调用线程。但是递归互斥体可以被拥有它的线程再次获得。直到解锁请求的数量等于成功的锁定请求的数量,递归互斥体才被解锁。
二、锁定互斥同步对象
- lock_mutex ( : : MutexHandle : )
复制代码 锁定MutexHandle给出的互斥体。如果互斥体当前未被锁定,它将被锁定并且由调用线程拥有,lock_mutex立即返回。
如果互斥体已经被另一个锁定线程时,调用线程会一直等待,直到互斥体被解锁。
等待的种类是由互斥体的属性集定义的在create_mutex中创建期间。
三、尝试锁定互斥同步对象
- try_lock_mutex( : : MutexHandle : Busy)
复制代码 try_lock_mutex的行为与lock_mutex相同,只是如果互斥体已被另一个线程锁定,但立即返回。
试图锁定互斥体之前的状态忙中返回。1表示互斥体在调用try_lock_mutex之前已经被锁定,0表示互斥体已解锁(已发出信号)。
四、解锁互斥同步对象
- unlock_mutex ( : : MutexHandle : )
复制代码 假设互斥体被锁定由调用线程拥有,解锁MutexHandle给定的互斥对象。解锁一个已经解锁的互斥体没有任何效果。
五、清除互斥同步对象
- clear_mutex ( : : MutexHandle : )
复制代码 销毁MutexHandle给出的互斥对象,互斥体必须解锁。调用clear_mutex后,互斥体不能再用了,句柄MutexHandle无效。
演示Demo,会打开两个窗口,可以看到两个子线程启动后,后面一个线程只能被动等待直到释放才执行,完成了互斥并同步功能:
mutex_demo.hdev
(2.56 KB, 下载次数: 18)
|