【问题标题】:pthreads join - How to cancel the join for another threadpthreads join - 如何取消另一个线程的连接
【发布时间】:2011-03-22 08:30:24
【问题描述】:

我希望能够切换要加入的目标踏板。 假设 t1 等待 t2。 t2 尚未退出,但现在我希望 t1 改为等待 t3。 有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: c++ c multithreading pthreads posix


    【解决方案1】:

    听起来你想要非便携式pthread_timedjoin_np

    【讨论】:

      【解决方案2】:

      您不能让 t1 等待 t3,因为无法在保持 pthread_join 运行的同时中断它,但是您可以使用 pthread_cancel 取消 t1,这将终止它,因此您将不再等待 t2 完成,并获得一个不同的线程等待 t3。

      【讨论】:

        【解决方案3】:

        我相信这是不可能的。但您可以按照pthread_join() 说明中的建议进行操作。

        pthread_join() 函数是一个 已被证明有用的便利 多线程应用程序。这是 确实,程序员可以模拟 如果未提供此功能 通过传递额外的状态作为 start_routine() 的参数。这 终止线程将设置一个标志 指示终止并广播 属于该状态的条件; 加入线程会等待 条件变量。

        【讨论】:

          【解决方案4】:

          我认为您应该在 t1 和 t2 之间使用条件变量。然后您可以将 t3 连接到 t1。

          【讨论】:

            【解决方案5】:

            轻松模拟pthread_timedjoin_np 的方法:

            1. 创建一个新线程来执行pthread_join,并将条件变量或信号量传递给它。
            2. 对条件变量或信号量执行定时等待。
            3. 在新线程上调用pthread_cancel
            4. 在新线程上调用pthread_join

            当然我遗漏了一些细节,但它们很容易填写。

            【讨论】:

              猜你喜欢
              • 2013-04-19
              • 1970-01-01
              • 1970-01-01
              • 2016-03-26
              • 1970-01-01
              • 1970-01-01
              • 2017-12-19
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多