c – 为什么boost :: mutex比vs2013的std :: mutex更快?
发布时间:2020-12-16 04:59:05 所属栏目:百科 来源:网络整理
导读:今天我写了一些代码来测试互斥体的性能. 这是boost(1.54)版本,编译于vs2010与O2优化: boost::mutex m;auto start = boost::chrono::system_clock::now();for (size_t i = 0; i 50000000; ++i) { boost::lock_guardboost::mutex lock(m);}auto end = boost::
今天我写了一些代码来测试互斥体的性能.
这是boost(1.54)版本,编译于vs2010与O2优化: boost::mutex m; auto start = boost::chrono::system_clock::now(); for (size_t i = 0; i < 50000000; ++i) { boost::lock_guard<boost::mutex> lock(m); } auto end = boost::chrono::system_clock::now(); boost::chrono::duration<double> elapsed_seconds = end - start; std::cout << elapsed_seconds.count() << std::endl; 而这是std版本,编译在VS2013上,也带有O2优化: std::mutex m; auto start = std::chrono::system_clock::now(); for (size_t i = 0; i < 50000000; ++i) { std::lock_guard<std::mutex> lock(m); } auto end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end - start; std::cout << elapsed_seconds.count() << std::endl; 有点不同,但做同样的事情. boost :: mutex将首先尝试_interlockedbittestandset, 似乎VS2013的std :: mutex复杂得多,我已经有了 解决方法
似乎stl :: mutex只能使用系统调用,这需要大量的开销;但是boost :: mutex通过编程方式至少实现其一些功能 – 即尽可能地避免系统调用,这将是WaitForSingleObject之前try _interlockedbittestandset检查的原因.
我不知道MS的stl的实际内部,但是我从操作系统类的例子中看到了这样的性能差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |