互斥锁,信号量和条件变量的实现

这几天看了不少资料,这里做一个简单的总结归纳:

几个不错的网站:

https://computing.llnl.gov/tutorials/pthreads/

http://cpp.ezbty.org/content/doc_list/libevent_%E4%BD%BF%E7%94%A8%E4%B8%8E%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90

http://www.kerneltravel.net/journal/iv/syscall.htm

   线程的三个主要同步原语:互斥锁,信号量和条件变量,一下简称mutex,sem,cond。

  •   其中mutex和sem都是对应futex进行了简单的封装,在不存在冲突的情况下就不用陷入到内核

中进行仲裁。而且pthread_join也是借助futex来实现的。而详见

  •   cond则是依靠mutex和信号来实现其语意,也就是说信号存在丢失的情况。sem是随内核持续的。
  •       读写锁的自旋实现是指一直忙等待一个变量的可用,虽然消耗处理器,但是没有阻塞唤醒的代价。

唤醒丢失往往会在下面的情况下发生:

  1. 一个线程调用pthread_cond_signal或pthread_cond_broadcast函数;
  2. 另一个线程正处在测试条件变量和调用pthread_cond_wait函数之间;
  3. 没有线程正在处在阻塞等待的状态下。
posted @ 2013-05-25 18:51  tangr206  阅读(1077)  评论(0编辑  收藏  举报