【问题标题】:Linux: Whether calling wait() from one thread will cause all other threads also to go to sleep?Linux:从一个线程调用 wait() 是否会导致所有其他线程也进入睡眠状态?
【发布时间】:2011-09-21 13:41:08
【问题描述】:

“wait() 系统调用暂停当前进程的执行,直到其子进程之一终止”。 Waitpid 也类似。

我的问题是从一个线程调用 wait() 是否会导致所有其他线程(在同一进程中)也进入睡眠状态?分离线程的行为是否也相同?

【问题讨论】:

    标签: c linux


    【解决方案1】:

    这只是手册中的一个错误。 wait 挂起调用线程,而不是进程。除非发送SIGSTOP 或一次手动暂停每个线程,否则绝对没有办法暂停整个进程。

    【讨论】:

    • 这是 Linux 特有的吗?由于 Linux 对每个线程都有单独的内核进程。
    • 一些上下文:Linux 2.4 没有真正的 POSIX 线程。每个线程都被视为不同的进程。对于具有完整 POSIX 线程的 Linux 2.6,这已更改。我猜有些手册页没有更新。
    • 但即使在 2.4 中也是错误的;因为线程的行为类似于进程,所以当然只有一个线程会被挂起。
    【解决方案2】:

    据我所知,从任何线程调用 wait 都会导致与该进程关联的所有线程停止。

    但不要让我这么说。最好的办法是对其进行测试。

    【讨论】:

      【解决方案3】:

      应该只停止当前线程。如果您想让人们在查看您的代码时感到不适并给自己带来很多问题,您可以将其用于陪审团操纵的线程同步。不过我不推荐它。

      【讨论】:

        猜你喜欢
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        • 2012-06-21
        • 2012-08-08
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多