首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11互斥体是否与未用C++11创建的线程兼容?

C++11互斥体是否与未用C++11创建的线程兼容?
EN

Stack Overflow用户
提问于 2013-12-07 18:40:55
回答 4查看 2K关注 0票数 13

我正在学习C++11,遇到了一个线程问题。我的一般问题是: C++11互斥体是否与没有用C++11的标准库创建的线程兼容?

我希望在用C++11创建的线程和由第三方库创建的另一个线程之间安全地共享信息,而我无法控制第三方库。

例如,我的应用程序使用PortAudio,它为音频输出创建自己的线程。我不确定它是在使用线程,还是使用特定于操作系统的线程库,但我确实知道PortAudio不是用C++11编写的,我希望在GUI线程(使用C++11线程)和使用互斥对象的PortAudio线程之间安全地共享数据。

类似地,我可以使用C++11互斥体来同步QT QThreads和C++11线程吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-07 19:08:01

显然,C++标准没有对与其他系统的兼容性作出任何保证。C和C++标准增加线程设备的部分原因是在一个线程系统上进行标准化。

在实践中,如果存在平台线程系统,则构建C和C++线程库以与平台线程系统集成。例如,在使用p线程的平台上,期望在适当的情况下使用p线程来构建标准库线程工具(据我所知,各种原子操作没有p线程接口,即标准库可能需要提供自己的同步原语)。

标准库类通过native_handle()方法提供对底层表示的访问。标准库应该实现从这些文件中返回的内容,例如,如果提供了p线程类型,那么似乎可以放心地假设这个特定的标准库会很好地处理这些线程。

票数 6
EN

Stack Overflow用户

发布于 2013-12-07 19:31:58

C++11互斥对象是否与未用C++11的标准库创建的线程兼容?

C++标准没有将“线程”定义为由C++标准库独占创建的东西。

1.10多线程执行和数据竞赛( intro.multithread ) 1执行线程(也称为线程)是程序中的单个控制流,包括对特定顶层函数的初始调用,并递归地包括随后由线程执行的每个函数调用。

因此,我的结论是,对你的问题的回答是“是”。

票数 9
EN

Stack Overflow用户

发布于 2013-12-08 01:20:38

C++11标准指定互斥应该与任何类型的‘执行代理’一起工作,包括不同的线程库。以下是有关标准的一些引文,我认为这是对问题的决定性回答:

互斥需求

互斥对象有助于防止数据竞争,并允许执行代理之间的数据安全同步(30.2.5)。执行代理从成功调用锁函数之一起就拥有互斥锁,直到调用解锁为止。

对可锁定类型的要求

执行代理是可以与其他执行代理并行执行工作的实体,如线程。注意:实现或用户可以引入其他类型的代理,如进程或线程池任务。-end注意:调用代理是由上下文决定的,例如包含调用的调用线程,等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20445051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档