C++ 在基准测试中发现Windows与Linux锁成本的巨大差异

C++ 在基准测试中发现Windows与Linux锁成本的巨大差异,c++,linux,windows,multithreading,locking,C++,Linux,Windows,Multithreading,Locking,下面是我用来在Windows和Linux上对锁获取进行基准测试的程序: #include <mutex> #include <time.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { mutex m; clock_t tStart = clock(); unsigned long long dd=0; fo

下面是我用来在Windows和Linux上对锁获取进行基准测试的程序:

#include <mutex>
#include <time.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) 
{ 

    mutex m;

    clock_t tStart = clock();
    unsigned long long dd=0;

    for(int i = 0; i < 100000000;i++) 
    {
        unique_lock<mutex> lck {m}; // acquire the mutex m
        dd++;
    }

    cout << ((double)(clock() - tStart)/CLOCKS_PER_SEC) << endl;

    return dd;
}
使用优化VS:release,g++:-O3

Windows: 5.8 seconds
Linux:   0.07 seconds
我比较了运行在windows和Windows7下的Ubuntu虚拟机,我很惊讶两者之间的差异如此之大


这是一个有效的比较,还是我遗漏了一些重要的东西

嗯,通常我会说Ubuntu虚拟机的评分不公平,因为它没有直接访问硬件的权限,但我希望它的性能会更差而不是更好…你是在用Visual Studio安装调试器吗?这可能会降低代码的速度,即使是在发布模式下…我只是在没有调试器的情况下运行它,执行优化需要5.902秒,比较没有意义。您应该经常比较发布版/优化版,主要是因为这是您最终将要使用的版本。这就是说,我在不久前就研究过类似的东西,还发现std::mutex的MS实现速度非常慢,据我记忆所及,boost::mutex的速度要快得多,所以您可以使用它作为替代品。哪种VS?哪个GCC?它们都有很多很多版本。@rcgldr我也想到了。所以我反汇编了文件。编译后的程序使用add cs:dd,1在循环中调用_pthread_mutex_lock和_pthread_mutex_unlock
Windows: 5.8 seconds
Linux:   0.07 seconds