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

Nob*_*ody 6 c++ conditional multithreading mutex pthreads

我有一个程序,应该从我的CPU中获得最大的收益.

它是通过pthreads多线程完成它们的工作,除了它们"只"使我的内核达到大约60%的负载,这在我看来是不够的.

我正在寻找原因并且问自己(特此是你)阻塞函数mutex_lock/cond_wait是否是候选者?

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

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

问候,

没有人

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

Nem*_*emo 3

在典型的现代 pthreads 实现中,每个线程都由内核管理,与单独的进程没有什么不同。pthread_mutex_lock任何像或 这样的阻塞调用pthread_cond_wait(也可以说是read)都会将其时间交给系统。然后系统会找到另一个符合条件的线程来调度,无论是在您的进程还是其他进程中,并运行它。

如果您的程序仅占用 60% 的 CPU,则与 pthread 操作相比,它更有可能在 I/O 上被阻塞,除非您对 pthread 操作做了过于精细的操作。