线程同步的几种方法

时间:2014-10-19 01:12:26   收藏:0   阅读:358

线程同步的方式包括:互斥锁、读写锁、条件变量、信号量和令牌。

 

下面提供Token在ACE中的一种实现方法。可以从下面的类图,可以看到ACE是如何设计Token的。

 

 

 

下面对ACE_Token中的组要方法提供分析。

 

  1. 判断是否有线程已经持有互斥锁了,如果没人持有,表示临界资源是可用的,那么可以立即返回成功。
  2. 检查是不是线程尝试递归获取互斥锁。因为Token支持这种情况,所以也可立即返回成功。同时将nesting计数器自增。
  3. 创建一个Token Entry,并将其排入队列。
  4. 调用用户自定义的Hook方法,在线程进行sleep之前,用户可以调用自定义的Hook方法。
  5. 线程睡眠,如果线程唤醒后,发现当前线程不是Token的拥有者将继续睡眠。
  6. 线程被唤醒后,将Token entry从队列中删除。
  1. 如果发现嵌套层数大于0,需要将嵌套层数的计数器减一,然后让该线程继续持有Token。
  2. 否则,该线程负责从队列中按照一定的策略,取出Token entry,并通过该Entry通知阻塞在Entry上的线程,资源被释放,你可以使用资源了。

 

注:Token Entry的创建者和删除者是同一个线程,并且在同一个方法中完成的(acquire)。

原文:http://www.cnblogs.com/bug-butterfly/p/4034073.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!