我正在学习C++11,遇到了一个线程问题。我的一般问题是: C++11互斥体是否与没有用C++11的标准库创建的线程兼容?
我希望在用C++11创建的线程和由第三方库创建的另一个线程之间安全地共享信息,而我无法控制第三方库。
例如,我的应用程序使用PortAudio,它为音频输出创建自己的线程。我不确定它是在使用线程,还是使用特定于操作系统的线程库,但我确实知道PortAudio不是用C++11编写的,我希望在GUI线程(使用C++11线程)和使用互斥对象的PortAudio线程之间安全地共享数据。
类似地,我可以使用C++11互斥体来同步QT QThreads和C++11线程吗?
发布于 2013-12-07 19:08:01
显然,C++标准没有对与其他系统的兼容性作出任何保证。C和C++标准增加线程设备的部分原因是在一个线程系统上进行标准化。
在实践中,如果存在平台线程系统,则构建C和C++线程库以与平台线程系统集成。例如,在使用p线程的平台上,期望在适当的情况下使用p线程来构建标准库线程工具(据我所知,各种原子操作没有p线程接口,即标准库可能需要提供自己的同步原语)。
标准库类通过native_handle()方法提供对底层表示的访问。标准库应该实现从这些文件中返回的内容,例如,如果提供了p线程类型,那么似乎可以放心地假设这个特定的标准库会很好地处理这些线程。
发布于 2013-12-07 19:31:58
C++11互斥对象是否与未用C++11的标准库创建的线程兼容?
C++标准没有将“线程”定义为由C++标准库独占创建的东西。
1.10多线程执行和数据竞赛( intro.multithread ) 1执行线程(也称为线程)是程序中的单个控制流,包括对特定顶层函数的初始调用,并递归地包括随后由线程执行的每个函数调用。
因此,我的结论是,对你的问题的回答是“是”。
发布于 2013-12-08 01:20:38
C++11标准指定互斥应该与任何类型的‘执行代理’一起工作,包括不同的线程库。以下是有关标准的一些引文,我认为这是对问题的决定性回答:
互斥需求
互斥对象有助于防止数据竞争,并允许执行代理之间的数据安全同步(30.2.5)。执行代理从成功调用锁函数之一起就拥有互斥锁,直到调用解锁为止。
对可锁定类型的要求
执行代理是可以与其他执行代理并行执行工作的实体,如线程。注意:实现或用户可以引入其他类型的代理,如进程或线程池任务。-end注意:调用代理是由上下文决定的,例如包含调用的调用线程,等等。
https://stackoverflow.com/questions/20445051
复制相似问题