OpenThreads与pthread不同点在于,他是根据面向对象开发的。
一、OpenThreads在线程同步上不同于之前我所了解的(比如pthread),除了常用的几路,他还提出了额外的。
传统的:
1. 互斥量OpenThreads::Mutex类
当线程使用某一资源时,先使用互斥量加锁。由于采用了面向对象机制将互斥量抽象为一个类,所以不像pthread函数那样传入个参数。Mutext有两个函数:
int Mutex::lock()
int Mutex::unlock()
2. 条件量OpenThreads::Condition类
与Mutex配合使用,一直阻塞直到Mutex解锁。
int wait(Mutex* mutex) // 阻塞直到mutex解锁
int signal() // 唤醒此线程
int broadcast() // 唤醒所有被阻塞的线程
3. 阻塞器类OpenThreads::Block类
阻塞/释放当前线程。
bool block();
void release();
新看到的:
4. 计数阻塞器OpenThreads::BlockCount类
与Block相似的是也是通过block阻塞线程,通过release释放线程。区别是,BlockCount设置了一个int count。每当BlockCount::completed被执行一次,count减1,减到0时,被阻塞线程自动释放。(注意此时被阻塞线程是阻塞的,故而能调用completed的一定是别的实体)
bool block();
void release();
void completed()
5. 栅栏类Barrier类
Barrier(int numThreads);
bool block(unsigned int) // 参数可以重新设定强度
所谓栅栏实际上就是一个int numThreads。每个执行Barrier::block的线程将阻塞,直到被阻塞的线程的个数达到了numThreads,就释放所有的线程,借以达到了同步的目的。这个类的名字很形象。