【发布时间】:2011-02-09 14:21:49
【问题描述】:
我正在尝试移植依赖 SIGCONT 来停止应用程序的某些线程的代码。使用当前的 linux nptl 实现似乎不能依赖 2.6.x 内核中的实现。我正在尝试设计一种方法来停止其他线程。目前我只能考虑互斥锁和条件变量。任何提示表示赞赏。
【问题讨论】:
标签: c linux pthreads scheduling signals
我正在尝试移植依赖 SIGCONT 来停止应用程序的某些线程的代码。使用当前的 linux nptl 实现似乎不能依赖 2.6.x 内核中的实现。我正在尝试设计一种方法来停止其他线程。目前我只能考虑互斥锁和条件变量。任何提示表示赞赏。
【问题讨论】:
标签: c linux pthreads scheduling signals
如果您依赖停止和恢复其他线程,那么您的应用程序最终会失败。
那是因为,你不能保证你不会停止一个线程,当它有一个互斥体来保护共享资源时。这将导致死锁,因为任何其他需要等待互斥锁的线程(可能包括停止第一个线程的线程)将永远等待。
我确信这是可能的,但你做错了。
注意:这样的互斥锁可能存在于 C 库的某些部分中,即使您自己的代码中没有。如果您自己的代码中没有任何代码,而且这很重要,我会感到惊讶。
【讨论】:
您如何将信号发送到目标线程?如果您使用pthread_kill() 将SIGSTOP / SIGCONT 发送到单个线程,它应该可以工作。
【讨论】: