C++ 在基准测试中发现Windows与Linux锁成本的巨大差异
下面是我用来在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
#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