ConcRT同步结构与标准库

ConcRT synchronization structures vs Standard Library

本文关键字:标准 结构 同步 ConcRT      更新时间:2023-10-16

如果我的应用程序以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_SECTIONMUTEXSRW和其他解决方案,认为它们是最快、最轻的解决方案(但不是最漂亮的)。

我不得不将std:mmutex更改为concurrency::critical_section,因为它实际上的行为不同:当mutex阻塞它时,它只是阻塞,当critical_setion阻塞时,ConcRT将启动/重用一个新线程(如果可用)。在我的情况下,在我切换之前,由于这种差异,我失去了很多并行性。

请参阅http://msdn.microsoft.com/en-us/library/ff601929.aspx,"尽可能使用协同同步结构"