Pthreads发出暂停的信号

Pthreads signal-like pause?

本文关键字:信号 暂停 Pthreads      更新时间:2023-10-16

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

所谓暂停,我的意思是停止执行并停止调度,直到另一个线程发出恢复的信号。

在pthread/POSIX线程堆栈中,可以使用pthread_kill向各个线程发送信号;但不幸的是,这不包括"停止"、"继续"或"终止"。请参阅此处的注释

如果您只对暂停线程感兴趣;一个巧妙的互斥和条件变量的公式是最好的方法。

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


告诉另一个线程暂停:

  1. 锁定互斥对象。

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

  3. 释放互斥对象。


检查是否需要暂停:

  1. 锁定互斥对象。

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

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

  4. 如果是,则阻塞条件变量并转到步骤2。


打开线程:

  1. 锁定互斥对象。

  2. pause变量设置为false。

  3. 广播条件变量。

  4. 释放互斥对象。

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