std::mutex使用临界区实现,因此它比OS Mutex(在Windows上)要快得多。但是它不如Windows CRITICAL_SECTION快。
在单个线程中进行紧密循环的时间:
423.76ns ATL CMutex
41.74ns std::mutex
16.61ns win32 Critical Section
我的问题是std::mutex还做了什么?我看了源代码,但是不太理解。在它推迟到Crit Sec之前有额外的步骤。我的问题是:这些额外的步骤是否有用?也就是说,这些额外的步骤是做什么的?如果我使用CRITICAL_SECTION会错过什么?
另外,为什么他们称它为Mutex,而它并没有用Mutex来实现?