gpt4 book ai didi

macos - pthread_kill 到 GCD 管理的线程

转载 作者:行者123 更新时间:2023-12-02 03:52:33 25 4
gpt4 key购买 nike

我正在尝试使用pthread_kill向特定线程发送信号。我使用 pthread_from_mach_thread_np() 获取句柄,然后使用 pthread_kill 发送信号。

这在我的其他测试中效果很好,但现在我发现,当尝试向 GCD 内部创建的线程发出信号时,我从 pthread_kill 得到返回码 45。

生成该线程的 GCD API:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ ... });

发生这种情况有什么原因吗?

——

为了添加一些进一步的信息,我并不是试图终止线程。 pthread_kill() 是向线程发送信号的标准 POSIX API。如果安装了信号处理程序,则线程的上下文将通过蹦床切换到处理程序。

虽然我尝试使用信号处理程序实现的目标可以通过更好的方式实现,但这在这里不是问题。即使出于纯粹的学术原因,我也想了解内部发生的情况。

最佳答案

工作队列线程(GCD 底层的工作线程)上明确禁止使用 pthread_kill() API,并且会为此类线程返回 ENOTSUP

这主要是为了防止在可能不期望的代码上下文中执行任意信号处理程序(因为这些线程是进程中许多独立子系统使用的共享资源),以及抽象该执行以便系统将来可以自由地更改它。

您可以在implementation中查看如何实现这一点的详细信息。 .

关于macos - pthread_kill 到 GCD 管理的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990839/

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