ConcRT同步结构与标准库
ConcRT synchronization structures vs Standard Library
如果我的应用程序以Windows为目标,并且它的某些部分已经使用了并发运行时。在ConcRT任务之外,与标准库实现(std::mutex
)相比,使用ConcRT同步结构(concurrency:critical_section
)有什么优点/缺点吗?(例如,同步WinAPI异步回调或管理dll导出函数之间的数据访问)
<mutex>
的MSDN文档指出它是基于ConcRT的,但这是否意味着内部互斥使用critical_section,因此在所有情况下都较慢,因此仅在可移植性方面具有优势
或者,反过来说,critical_section是专门为与ConcRT调度程序一起使用而设计的,当与OS线程一起使用时,它是一个巨大的过度使用?
附言:这个问题涉及并发运行时中的所有同步结构(critical_section,reader_writer_lock&event)
此外,我还忽略了WinAPI的CRITICAL_SECTION
、MUTEX
、SRW
和其他解决方案,认为它们是最快、最轻的解决方案(但不是最漂亮的)。
我不得不将std:mmutex更改为concurrency::critical_section,因为它实际上的行为不同:当mutex阻塞它时,它只是阻塞,当critical_setion阻塞时,ConcRT将启动/重用一个新线程(如果可用)。在我的情况下,在我切换之前,由于这种差异,我失去了很多并行性。
请参阅http://msdn.microsoft.com/en-us/library/ff601929.aspx,"尽可能使用协同同步结构"
相关文章:
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- Windows 将标准的 C 文件结构注入到正在运行的进程中
- 标准 cpp 数据结构和线程互斥锁?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 复杂的标准::地图,结构,标准::d问题
- 标准库容器结构是否存储副本或引用?
- 将结构传递到头文件的标准方法
- 如何正确使用结构/标准::p空气
- 为什么标准库不以无锁的方式为 8 字节以下的结构实现 std::atomic?
- C++标准是否允许复制任意多态数据结构?
- 如何在标准::映射中try_emplace POD 结构?
- 根据标准对结构向量进行排序,然后显示结果
- 如何在C 中的标准堆栈中推动结构类型变量
- 是在同一体系结构上运行的静态编译的纯标准C 程序可移植
- 以符合标准的方式用与数组相同类型的成员重新解释结构
- 为什么这个结构不是标准布局
- 与此类结构对齐是否以C 标准为标准
- 标准库标头层次结构
- 内部 STL 容器结构能否在下一个标准中发生变化?
- "选择<布尔,类型名,类型名>"是否有标准结构?