工厂的 createOMOSMutex 方法将创建一个互斥对象,这表示互斥。互斥对象是用于保护线程内的临界区的基本同步机制。互斥对象用于实现受保护的对象。
互斥对象允许一个线程以互斥独占方式访问资源。当一次只允许一个线程修改数据或某项其他受控资源时,互斥对象非常有用。例如,向链接列表中添加节点就是一次只应允许一个线程的过程。通过使用互斥对象来控制此链接列表,一次只有一个线程能够获得对此列表的访问权。
在 IBM® Rational® Rhapsody® 中,互斥对象是作为递归锁定互斥对象实现的。这意味着,同一线程可以多次锁定互斥对象,而不会阻塞自身。换而言之,互斥对象实际上是计数信标。为目标环境实现 OMOSMutex 时,您应该将其作为递归锁定互斥对象实现。
互斥对象可以处于空闲状态,也可以被锁定(它们最初处于空闲状态)。当某个任务执行 lock 操作并发现互斥对象被锁定时,此任务必须等待。此任务与其他受阻任务一起被放入与该互斥对象相关联的等待队列中,并且 CPU 调度程序将选择另一个任务以进行执行。如果 lock 操作发现该互斥对象处于空闲状态,那么此任务将锁定该互斥对象并进入其临界区。当任何任务通过调用 free 释放了该互斥对象时, 等待队列中的第一个受阻任务将移入就绪队列,系统可以在此队列中根据 CPU 调度算法选择运行此任务。
同一线程内可以嵌套同一互斥对象的 lock 和 free 调用,而不会无限期地阻塞自身。由同一线程进行的嵌套锁定不会阻塞锁定线程。但是,将会对嵌套锁定进行计数,以便适当的 free 真正释放互斥对象。