在pthreads API中是否有一种方法可以让一个线程指示自己或另一个线程暂停?
暂停,我的意思是停止执行并停止计划,直到另一个线程发出信号恢复为止。
答案 0 :(得分:6)
在pthread / POSIX Thread stack中,您可以使用pthread_kill向各个线程发送信号;但不幸的是,这不包括“停止”,“继续”或“终止”。请参阅注释here
如果你只对暂停线程感兴趣;一个狡猾的互斥和公式变量公式是最好的前进方式。
答案 1 :(得分:6)
您可以为此使用互斥锁和条件变量。
告诉另一个线程暂停:
锁定互斥锁。
将共享的pause
变量设置为true。
释放互斥锁。
要检查是否需要暂停:
锁定互斥锁。
检查pause
变量是否设置为true。
如果没有,请释放互斥锁并继续。
如果是,请阻止条件变量并转到步骤2.
要取消暂停帖子:
锁定互斥锁。
将pause
变量设置为false。
广播条件变量。
释放互斥锁。
但我必须指出,这几乎肯定不是一件明智的事情。没有理由你想要暂停一个线程。你的外在问题可能就是阻止这个过程从特定类型的工作开始。这应该通过命令线程执行其他工作来完成,而不是阻止它们执行任何工作。