#include
#include
#include
#include
std::mutex mx;
std::shared_mutex smx;
constexpr int N = 100'000'000;
int main()
{
auto t1 = std::chrono::steady_clock::now();
for (int i = 0; i != N; i++)
{
std::unique_lock l{ mx };
}
auto t2 = std::chrono::steady_clock::now();
for (int i = 0; i != N; i++)
{
std::unique_lock l{ smx };
}
auto t3 = std::chrono::steady_clock::now();
auto d1 = std::chrono::duration_cast(t2 - t1);
auto d2 = std::chrono::duration_cast(t3 - t2);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/69990339/why-is-stdmutex-so-much-worse-than-stdshared-mutex-in-visual-c[/url]
Выполнили следующее в Visual Studio 2022 в режиме выпуска: [code]#include #include #include #include
std::mutex mx; std::shared_mutex smx;
constexpr int N = 100'000'000;
int main() { auto t1 = std::chrono::steady_clock::now(); for (int i = 0; i != N; i++) { std::unique_lock l{ mx }; } auto t2 = std::chrono::steady_clock::now(); for (int i = 0; i != N; i++) { std::unique_lock l{ smx }; } auto t3 = std::chrono::steady_clock::now();
auto d1 = std::chrono::duration_cast(t2 - t1); auto d2 = std::chrono::duration_cast(t3 - t2);