Fir*_*his 4 c++ linux multithreading boost pthreads
使用或直接使用时boost::conditional_variable,是否存在等待的开销?这些是更具体的问题:ACE_Conditionalpthread_cond_wait
wait定期获取互斥锁?在这种情况下,我猜想每次迭代浪费系统调用的一些CPU时间来锁定和释放互斥锁.它是否与不断获取和释放互斥锁相同?wait?Afaik,当使用信号量时,获取调用响应性取决于调度程序时间片大小.它是如何工作的pthread_cond_wait?我认为这是依赖于平台的.我对Linux更感兴趣,但如果有人知道它在其他平台上如何工作,它也会有所帮助.
还有一个问题:是否为每个条件分配了额外的系统资源?我不会在我的代码中创建30000个互斥锁,但是我应该担心30000个使用相同的互斥锁的条件吗?
这是pthread_cond手册页中的内容:
pthread_cond_wait原子地解锁互斥锁并等待条件变量cond发出信号.线程执行被挂起,并且在发出条件变量信号之前不消耗任何CPU时间.
所以从这里我回答以下问题:
关于资源,在同一手册页上:
在LinuxThreads实现中,没有资源与条件变量相关联,因此
pthread_cond_destroy除了检查条件没有等待线程之外什么都不做.
更新:我挖掘了pthread_cond_*函数的来源,行为如下:
wait它时,它被暂停和未调度.线程id插入等待线程列表的尾部.signal列表头部的线程时会被调度回来.因此,唤醒与调度程序一样高效,不消耗OS资源,唯一的内存开销是等待列表的大小(请参阅futex_wake函数).