ACE中提供的安全保护原语,除了守卫、条件变量、消息队列之外,还有以下安全保护原语:
ACE_Mutex:
封装互斥机制的包装类,用于为共享资源的序列化访问提供简单、高效的保护机制.其功能与二元信号量类似.可用于线程和进程间的互斥;
ACE_Thread_Mutex:
可用于替换ACE_Mutex,专门用于线程之间的互斥;
ACE_Recursive_Thread_Mutex:
这种互斥体是递归互斥体,也就是说,可以由同一个线程多次获取.注意:为了使其能够正常工作,你释放它的次数必须要和获取它的次数一样多;
ACE_RW_Mutex:
这个类是封装readers/write锁的类.要进行读和写,要以不同的方式获取这种锁,在没有写入者时可以有多个读者对其进行读取;这种锁是非递归的;
ACE_RW_Thread_Mutex:
可用于替换ACE_RW_Mutex,专门用于线程之间的同步;
ACE_Token:
令牌是ACE提供的最丰富、最重要的加锁原语.这种锁是递归的,允许你进行读加锁和写加锁.此外,它还会保证严格的FIFO获取顺序;所有调用acquire()方法的线程都会进入一个FIFO队列,按顺序(FIFO的顺序)获取锁;
ACE_Atomic_Op:
模板包装,允许你在指定的类型上进行安全的算术运算;
例如:
typedef ACE_Atomic_Op<ACE_Thread_Mutex, unsigned int> SafeUINT;
typedef ACE_Atomic_Op<ACE_Thread_Mutex, int> SafeINT;
ACE_Guard<T>:
基于模板的守卫类,其模板参数是锁的类型;
ACE_Read_Guard<T>:
守卫类,会在构造过程中调用一个读/写守卫的acquire_read()操作;
ACE_Write_Guard<T>:
守卫类,会在构造过程中调用一个读/写守卫的acquire_write()操作;
递归互斥体:
可以由同一个线程多次获取,但为了能够正常工作,释放的次数必须与获取的次数相同;ACE以ACE_Recursive_Thread_Mutex类和ACE_Token类的形式来提供递归互斥体的功能;
Readers/Writer锁:
这个锁就是多读者/单写者锁,它允许多个线程同时持有一个锁进行读取,但是只有一个线程持有这个锁进行写入;这样的锁常用于这样的场合:受到保护的数据经常频繁地被多个线程读取,但是不常被写入,或者是只被很少几个线程写入;因此,也只有在读取竞争大大超过写入竞争的时候,这样的锁的效率就比较高了;
ACE以ACE_RW_Mutex类和ACE_RW_Thread_Mutex类的形式来提供Readers/Writer锁;调用者可以通过调用acquire_read()方法来获取这些互斥体以进行读取,通过调用acquire_write()方法来获取这些互斥体以进行写入;
评论