【问题标题】:Sleeping a PThread other than the one doing the calling休眠一个 PThread 而不是做调用的那个
【发布时间】:2011-09-28 00:02:34
【问题描述】:

所以我有一堆 pthread,其中一个是“主”线程,并确定工作线程应该运行还是休眠。但是睡眠的 POSIX 定义说The sleep() function shall cause the calling thread to be suspended from execution...

显然我可以做一些笨拙的事情,比如让每个工作线程检查是否设置了标志,但我正在寻找更好的东西。我希望我遗漏了一些明显的东西,因为这会影响我的计划。

【问题讨论】:

  • “停止”另一个线程作为问题弹出了很多,但这很少是您真正需要的。你能更详细地解释你想要达到的目标吗?
  • 我正在写一个(希望)有效地执行某人的博士论文。证明取决于某些线程在某些时间不消耗资源。对我来说,这就是睡眠。如果您知道更好的方法,我会全力以赴。

标签: multithreading pthreads sleep cilk


【解决方案1】:

如果你还是要破解 Cilk,我想你可以为所欲为

如何让每个 pthread 在出队(或窃取)工作对象之前获取一个信号量单元,并在完成工作后释放它?当然,可能会有一点延迟,但是可用于工作的线程数将与向信号量发出信号的单元数相匹配。要从您的控制线程中将可用线程数减少 N,请等待并获取 N 个单元,因此阻塞 N 个工作线程。要重新启动它们,请向 N 个单位发出信号。

这对您的系统有用吗?

Rgds, 马丁

【讨论】:

  • 认为是这样。我没有考虑过为此目的使用信号量,但它似乎应该做我想做的事情。
  • 我想,为了完整起见,我应该添加 sema。需要使用与工作线程相同数量的单元来创建/初始化。也许您可以在工作线程 ctor 中发送一个单元并在 dtor 中删除一个单元,以便“自动”设置 sema?
  • 啊不幸的是我才意识到这个问题。我将无法停止已经在运行的线程。我可以阻止线程做更多的工作,但我无法在运行中停止它。
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多