【问题标题】:nptl SIGCONT and thread schedulingnptl SIGCONT 和线程调度
【发布时间】:2011-02-09 14:21:49
【问题描述】:

我正在尝试移植依赖 SIGCONT 来停止应用程序的某些线程的代码。使用当前的 linux nptl 实现似乎不能依赖 2.6.x 内核中的实现。我正在尝试设计一种方法来停止其他线程。目前我只能考虑互斥锁和条件变量。任何提示表示赞赏。

【问题讨论】:

    标签: c linux pthreads scheduling signals


    【解决方案1】:

    如果您依赖停止和恢复其他线程,那么您的应用程序最终会失败。

    那是因为,你不能保证你不会停止一个线程,当它有一个互斥体来保护共享资源时。这将导致死锁,因为任何其他需要等待互斥锁的线程(可能包括停止第一个线程的线程)将永远等待。

    我确信这是可能的,但你做错了。


    注意:这样的互斥锁可能存在于 C 库的某些部分中,即使您自己的代码中没有。如果您自己的代码中没有任何代码,而且这很重要,我会感到惊讶。

    【讨论】:

    • 正如我所说,我正在尝试移植代码。这不是我的设计。不过感谢有关隐藏互斥锁的 cmets。
    • 我之前在 C 库中遇到过互斥锁 - 在派生多线程程序的相关案例中。
    • 我也遇到过这些,在将 C stdio 与 C++ stdio 同步的部分。
    【解决方案2】:

    您如何将信号发送到目标线程?如果您使用pthread_kill()SIGSTOP / SIGCONT 发送到单个线程,它应该可以工作。

    【讨论】:

    • 使用当前内核,即 nptl 实现 SIGSTOP 停止整个进程,而不仅仅是单个线程,即使使用 pthread_kill 或为每个线程设置适当的信号掩码。
    猜你喜欢
    • 2023-03-20
    • 2011-05-24
    • 2011-04-01
    • 2012-04-23
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多