gpt4 book ai didi

c++ - 如何停止在共享库中实现的阻塞 pthread_join()

转载 作者:行者123 更新时间:2023-11-30 02:16:58 25 4
gpt4 key购买 nike

我的代码在程序退出前调用了第三方库中的函数。不幸的是,调用的函数阻塞了主线程,这是由 .so 库中的 pthread_join() 引起的。

由于它在我无法控制的库内,我正在考虑如何破坏它以便主线程可以继续进行

使用 gdb 附加信息:

0x00007ffff63cd06d in pthread_join (threadid=140737189869312, thread_return=0x0)
at pthread_join.c:89
89 lll_wait_tid (pd->tid);
Missing separate debuginfos, use: debuginfo-install keyutils-libs-1.4-5.el6.x86_64 krb5-libs-1.10.3-65.el6.x86_64 libcom_err-1.41.12-23.el6.x86_64 libselinux-2.0.94-7.el6.x86_64 openssl-1.0.1e-57.el6.x86_64

提前致谢。

最佳答案

该库旨在让调用线程等待某事完成。由于您无法更改库的设计,因此只需从无事可做的线程中调用库即可。

通过设计交互的方式,您可以获得所需的任何语义。如果您希望调用线程稍后在方便时获得结果,您可以使用 promise/future。您可以将调用线程设计为等待一定时间然后超时。在超时情况下,如果不需要结果可以忽略,也可以设计一些方法稍后检查并获取结果。您还可以让调用库的线程对结果执行任何需要完成的操作,这样调用线程就不必担心它。

只需隔离您无法控制的代码,并围绕它编写您需要的任何代码以获得您的代码所需的行为。库需要调用它的线程等待它完成,因此隔离调用它的线程并让库拥有它想要的东西。

关于c++ - 如何停止在共享库中实现的阻塞 pthread_join(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com