Pthreads信号般的暂停?

时间:2012-02-23 17:07:47

标签: c++ multithreading pthreads

在pthreads API中是否有一种方法可以让一个线程指示自己或另一个线程暂停?

暂停,我的意思是停止执行并停止计划,直到另一个线程发出信号恢复为止。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:6)

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


告诉另一个线程暂停:

  1. 锁定互斥锁。

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

  3. 释放互斥锁。


  4. 要检查是否需要暂停:

    1. 锁定互斥锁。

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

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

    4. 如果是,请阻止条件变量并转到步骤2.


    5. 要取消暂停帖子:

      1. 锁定互斥锁。

      2. pause变量设置为false。

      3. 广播条件变量。

      4. 释放互斥锁。

      5. 但我必须指出,这几乎肯定不是一件明智的事情。没有理由你想要暂停一个线程。你的外在问题可能就是阻止这个过程从特定类型的工作开始。这应该通过命令线程执行其他工作来完成,而不是阻止它们执行任何工作。