OpenThreads线程库

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,就释放所有的线程,借以达到了同步的目的。这个类的名字很形象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值