Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ pthreads join-如何取消另一个线程的连接_C++_C_Multithreading_Pthreads_Posix - Fatal编程技术网

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

C++ pthreads join-如何取消另一个线程的连接,c++,c,multithreading,pthreads,posix,C++,C,Multithreading,Pthreads,Posix,我希望能够切换要加入的目标踏板。 假设t1等待t2。t2尚未退出,但现在我希望t1等待t3。 有办法吗?谢谢。您不能让t1等待t3,因为在保持运行的同时无法中断pthread_join,但是您可以使用pthread_cancel取消t1,这将终止它,因此您将不再等待t2完成,而让另一个线程等待t3。我相信这是不可能的。但是您可以按照pthread\u join()说明中的建议进行操作 pthread_join()函数是一个 已证明在应用程序中非常有用的便利性 多线程应用程序。它是 是的,程序员可

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

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

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

pthread_join()函数是一个 已证明在应用程序中非常有用的便利性 多线程应用程序。它是 是的,程序员可以模拟 如果未提供此功能,请执行此操作 通过将额外状态作为 start_例程()的参数。这个 终止线程会将标志设置为 指示终止并广播一条消息 属于该状态一部分的状态; 一个连接线程将在上面等待 条件变量


听起来你想要的是不可移植的。

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

模拟
pthread\u timedjoin\u np
可移植的简单方法:

  • 创建一个新线程来执行
    pthread_join
    ,并向其传递一个条件变量或信号量
  • 对条件变量或信号量执行定时等待
  • 在新线程上调用
    pthread\u cancel
  • 在新线程上调用
    pthread\u join
  • 当然我遗漏了一些细节,但它们很容易填写