POSIX Threads

  •  查看Pthread版本的方法
 getconf GNU_LIBPTHREAD_VERSION

 

Native POSIX Thread Library(NPTL)是Linux内核中实践POSIX Threads标准的库。

  测试表明,NPTL能够成功地在IA-32平台上在两秒钟内生成100,000个线程;相应的没有NPTL的内核将耗费15分钟左右。

  • linux 下pthread 实现

   参考 glibc 源码,目录下 nptl 目录,pthread_* 文件

 

  1. 1. 直接使用pthread_cond_wait时,等待本身是否有开销?

  这是pthread_cond手册页中写的内容:

pthread_cond_wait atomically unlocks the mutex and waits for the condition variable cond to be signaled.

The thread execution is suspended and does not consume any CPU time until the condition variable is signaled.

因此,从这里我将回答以下问题:

* 在发出等待信号或取消等待之前,不会调度等待线程。

* 没有定期的互斥获取。在等待返回之前,仅需重新获取一次互斥锁。

* 由于互斥释放,信号与等待返回之间经过的时间类似于线程调度的时间。

 

  1. 2. pthread_cond_* 实现

 深入研究了pthread_cond_ *函数的来源,其行为如下:

* Linux中的所有pthread条件都是使用futex实现的。参见 glibc 源码,sysdps/nptl/futex

* 当线程调用wait时,它将被挂起且未计划。线程ID插入在等待线程列表的末尾。

* 当线程调用signal时,将排回列表开头的线程。

因此,唤醒与调度程序一样高效,不消耗任何OS资源,唯一的内存开销就是等待列表的大小(请参见futex_wake函数)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值