pthreads join - 如何取消另一个线程的连接

时间:2011-03-22 08:30:25

标签: c++ c multithreading pthreads posix

我希望能够切换目标胎面以加入。 假设t1等待t2。 t2还没有退出,但现在我想让t1等待t3。 有没有办法做到这一点?感谢。

5 个答案:

答案 0 :(得分:3)

听起来你想要不可携带的pthread_timedjoin_np

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  

pthread_join()函数是一个   已被证明有用的便利性   多线程应用程序。它是   确实,程序员可以模拟   如果没有提供此功能   通过额外的国家作为一部分   start_routine()的参数。该   终止线程会设置一个标志   表示终止和广播   作为该州一部分的条件;   一个加入的线程会等待   条件变量。

答案 3 :(得分:0)

我认为你应该在t1和t2之间使用一个条件变量。然后你可以把t3加到t1。

答案 4 :(得分:0)

轻松模仿pthread_timedjoin_np便携式:

  1. 创建一个新线程来执行pthread_join,并将其传递给条件变量或信号量。
  2. 对条件变量或信号量执行定时等待。
  3. 在新主题上调用pthread_cancel
  4. 在新主题上调用pthread_join
  5. 当然我已经留下了一些细节,但是很容易填写。