2012-02-23 43 views
3

在pthreads API中有一种方法,我可以让一个线程指示自己或另一个线程暂停吗?Pthreads信号般的暂停?

暂停,我的意思是停止执行,并停止获取计划,直到另一个线程指示它恢复。

+0

你想在任何地方或特定地点暂停吗? – Tudor 2012-02-27 07:51:13

回答

6

pthread/POSIX Thread stack中,您可以使用pthread_kill发送信号给单独的线程;但不幸的是,这并不包括“停止”,“继续”或“终止”。请参阅注释here

如果您只对暂停线程感兴趣,一个狡猾的互斥体和条件变量公式是最好的前进方式。

+0

谢谢你,享受你的赏金;) – 2012-02-27 13:16:19

+0

是的大卫施瓦茨,享受那赏金;) – Marty 2012-03-16 09:01:14

6

您可以为此使用互斥锁和条件变量。


告诉另一个线程暂停:

  1. 锁定互斥。

  2. 设置共享pause变量为true。

  3. 释放互斥锁。


要检查是否需要暂停:

  1. 锁定互斥。

  2. 检查pause变量是否设置为true。

  3. 如果没有,释放互斥并继续。

  4. 如果是这样,条件变量块转到步骤2。


取消暂停一个线程:

  1. 锁定互斥。

  2. pause变量设置为false。

  3. 广播条件变量。

  4. 释放互斥锁。

但我必须指出,这几乎肯定不是一个明智的做法。没有理由你应该永远不想暂停一个线程。你的外在问题可能就像阻止某个特定类型的工作一样。这应该通过指挥线程完成其他工作来完成,而不是阻止他们从事任何工作。