我的(主要是 POSIX)应用程序的 Mac 版本生成了一个子线程,该线程调用 CFRunLoopRun() 来执行事件循环(从 MacOS 获取网络配置更改事件)。
到了收拾东西离开的时候,主线程在子线程的run-loop上调用CFRunLoopStop(),此时CFRunLoopRun()在子线程中返回,子线程退出,主线程(即阻塞等待子线程退出)可以继续。
这似乎可行,但我的问题是:这是一种安全/推荐的方法吗?特别是,从另一个线程调用 CFRunLoopStop() 是否容易导致竞争条件?据我所知,Apple 的文档对此主题保持沉默。
如果从主线程调用 CFRunLoopStop() 不是解决方案,那么什么是好的解决方案?我知道我可以让子线程调用 CFRunLoopRunInMode() 并经常唤醒以检查布尔值或其他内容,但如果可以避免的话,我不希望子线程进行任何轮询。