繁体   English   中英

当 pthreads 在 mutex_lock/cond_wait 中等待时会发生什么?

[英]What happens when pthreads wait in mutex_lock/cond_wait?

我有一个程序可以最大限度地利用我的 cpu。

它是通过 pthreads 进行多线程处理的,除了它们“仅”让我的内核达到大约 60% 的负载这一事实之外,它们的工作做得很好,这在我看来还不够。

我正在寻找原因,并问自己(以及您)阻塞函数 mutex_lock/cond_wait 是否是候选函数?

当一个线程无法在这样的 function 中运行时会发生什么?

  • pthread 是否切换到它处理的另一个线程或
  • 线程是否将时间交给系统,如果是后者,我可以改变这种行为吗?

问候,

没有人

更多信息该设置是一个填充任务池的主线程和无数从那里获取作业并等待在序列化计算完成时通过广播发出信号的条件的工作人员。 他们 go 继续使用此计算中的值,直到他们完成,交付他们的邮件并获取下一个工作......

在典型的现代 pthreads 实现中,每个线程都由 kernel 管理,这与单独的进程不同。 任何阻塞调用,如pthread_mutex_lockpthread_cond_wait (还有,比如read )都会将时间交给系统。 然后,系统将找到另一个符合条件的线程来调度,无论是在您的进程中还是在另一个进程中,并运行它。

如果你的程序只占用 60% 的 CPU,那么它在 I/O 上比在 pthread 操作上更可能被阻塞,除非你对 pthread 操作做了一些过于精细的事情。

如果一个线程正在等待互斥体/条件,它不会使用资源(嗯,只使用少量)。 每当线程进入等待 state 时,控制切换到其他线程。 当互斥锁被释放(或条件变量发出信号)时,线程唤醒并可能获取互斥锁(如果没有其他线程先抢到它),并继续运行。 但是,如果某个其他线程获取了互斥锁(如果有多个线程正在等待它,则可能发生这种情况),该线程返回到休眠 state。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM