c – 从另一个线程调用CFRunLoopStop是否安全?

我的(主要是POSIX)应用程序的Mac构建产生一个子线程,它调用CFRunLoopRun()来执行事件循环(从MacOS获取网络配置更改事件).

当打包并离开时,主线程在子线程的运行循环上调用CFRunLoopStop(),此时CFRunLoopRun()在子线程中返回,子线程退出,主线程(这是阻止等待子线程退出)可以继续.

这似乎有效,但我的问题是:这是一种安全/推荐的方式吗?特别是,从另一个线程调用CFRunLoopStop()容易导致竞争条件?据我所知,Apple的文档对此主题保持沉.

如果从主线程调用CFRunLoopStop()不是解决方案,那么什么是好的解决方案?我知道我可以让子线程调用CFRunLoopRunInMode()并经常唤醒以检查布尔值或其他东西,但我宁愿不让子线程做任何轮询,如果我可以避免它.

解决方法

In particular,is calling CFRunLoopStop() from another thread [safe]?

这是Run Loop Management所说的:

The functions in Core Foundation are generally thread-safe and can be called from any thread.

也许CFRunLoopStop是安全的.但我确实担心他们使用“一般”这个词.我的规则是:如果Apple没有说它是安全的,你应该假设它不是.

为了安全起见,您可以考虑创建一个运行循环源,将其添加到运行循环中,并在结束线程时发出该信号源的信号.该文档包含自定义运行循环源的示例.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...