1、四大基类
Cancelable
Cancelable提供了通用的方法来定义语义,调用了cancel()的Cancelable对象,将被置为disable。调用过cancel()ed的对象不必立即中止工作。通常被cancel()ed的对象尽可能快的继续执行完当前分配给它的工作,然后再变得不可用;但它不能接受任何新分配给它的工作。
cancel()函数:使一个Cancelable对象变为disable状态。拒绝接受新任务,尽可能快的完成当前任务;对一个Cancelable对象多于一次的cancel()操作都是无效的。isCanceled():查询Cancelable对象是否已经是canceled的状态。
Waitable
Waitable提供了通用的方法来定义语义,一个对象可以通过Waitable的接口来测试其内部状态。其他对象可以wait()一个Waitable对象。在这种情况下,如果调用线程的condition为false将会阻塞此线程。举例,Condition是一个Waitable对象,因此它的wait()是意思是阻塞线程直到有外部激励来改变Condition的内部状态为true。还有Barrier、Executor等。
Lockable
Lockable添加了通用方法acquire()、release(),它不一定是互斥访问的。
NonCopyable
一些对象是不能被拷贝的。特别是一些互斥访问的东西,例如,事件对象,队列,信号量等等
2、Mutex种类
Mutex
[定义]:Mutex对象用于串行的访问临界区,通过acquire()进入临界区,release()离开临界区。
[调度方式]:FIFO的顺序。
[异常]:A Mutex will throw a Deadlock_Exception if an attempt to acquire a Mutex more than once is made from the context of the same thread. A Mutex will throw an InvalidOp_Exception if an attempt to release a Mutex is made from the context of a thread that does not currently own that Mutex.
FastMutex
[定义]:FastMutex是一个效率稍微好一点非递归互斥锁。它的实现比其他的Mutex类执行速度快,但这样它却牺牲了它的健壮性。它的一个性质是acquire()和tryAcquire()时不会抛出中断异常。
[调度方式]:由操作系统决定。
[异常]:无
RecursiveMutex
[定义]:它是一种递归的Mutex,因为它可以在同一个线程中多于一次的aquire()/release(),却不会死锁(抛出Deadlock_Exception异常)
[调度方式]:FIFO的顺序。
[异常]: A Mutex will throw an InvalidOp_Exception if an attempt to release() a Mutex is made from the context of a thread that does not currently own that Mutex.
PriorityMutex
[定义]:PriorityMutex类似于其他的Mutex,不同之处在于它有不同于其他Mutex的调度策略。
[调度方式]:如果多个线程争夺调用acquire(),则按线程优先级的顺序来调度,高优先级的线程先进入。
PriorityInheritanceMutex
[定义]:PriorityInheritanceMutex类似于PriorityMutex,不同之处在于它有独特的调度方式。
[调度方式]:也类似于PriorityMutex,高优先级的线程先进入。一个高优先级的线程试图进入acquire(),在即将阻塞优先级的线程时,如果此时这个低优先级的线程已经执行了acquire(),此时它将临
时提高线程的优先级来适应这个调度,一直到执行release()后恢复以前的优先级。