Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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++ 从另一个线程调用CFRunLoopStop安全吗?_C++_C_Multithreading_Macos Carbon_Cfrunloop - Fatal编程技术网

C++ 从另一个线程调用CFRunLoopStop安全吗?

C++ 从另一个线程调用CFRunLoopStop安全吗?,c++,c,multithreading,macos-carbon,cfrunloop,C++,C,Multithreading,Macos Carbon,Cfrunloop,我的(主要是POSIX)应用程序的Mac构建生成一个子线程,该子线程调用CFRunLoopRun()来执行事件循环(从MacOS获取网络配置更改事件) 当该打包并离开时,主线程在子线程的运行循环上调用CFRunLoopStop(),此时CFRunLoopRun()返回子线程,子线程退出,主线程(阻塞等待子线程退出)可以继续 这似乎有效,但我的问题是:这是一种安全/推荐的方法吗?特别是,从另一个线程调用CFRunLoopStop()会导致争用情况吗?据我所知,苹果公司的文档对此没有提及 如果从主线

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

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

这似乎有效,但我的问题是:这是一种安全/推荐的方法吗?特别是,从另一个线程调用CFRunLoopStop()会导致争用情况吗?据我所知,苹果公司的文档对此没有提及

如果从主线程调用CFRunLoopStop()不是解决方案,那么什么是好的解决方案?我知道我可以让子线程调用CFRunLoopRunInMode(),并经常醒来检查布尔值或其他内容,但如果可以避免的话,我不希望让子线程进行任何轮询

特别是,是否从另一个线程调用CFRunLoopStop()[safe]

下面是我所说的:

核心基础中的函数一般是线程安全的,可以从任意线程调用。 所以也许CFRunLoopStop是安全的。但我确实担心他们使用“一般”一词。我的规则是:如果苹果不说它是安全的,你应该假设它不是


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

对于CFRunLoopStop,如果只能在当前运行循环上安全地调用它,则无需向其传递指示要停止哪个运行循环的参数

参数的存在强烈表明可以使用它来停止除当前运行循环以外的运行循环