当std::shared_mutex胜过std::mutex:谷歌基准研究

在编写高性能多线程程序时,选择正确的同步原语至关重要。近日,谷歌进行的基准研究表明,在某些情况下,std::shared_mutex胜过std::mutex,成为更好的选择。

std::shared_mutex是C++17中引入的新类型,允许多个线程同时读取数据,但只允许一个线程写入数据。相比之下,std::mutex在任何时候只允许一个线程访问共享资源。

谷歌的基准测试结果显示,在读取操作远远多于写入操作的情况下,std::shared_mutex明显优于std::mutex。这是因为std::shared_mutex在读取时允许多个线程同时访问数据,而std::mutex需要等待独占所有权。

此外,谷歌的研究还发现,在写入操作较多时,std::mutex表现更好。因为在写入操作时,需要独占所有权,而std::shared_mutex则需要更多的开销来处理读写锁的切换。

因此,在设计多线程程序时,开发人员应该根据实际情况选择合适的同步原语。std::shared_mutex适用于读取操作频繁且写入操作较少的场景,而std::mutex适用于写入操作频繁的场景。

通过谷歌的基准研究,我们可以更好地理解不同同步原语的优缺点,为编写高效的多线程程序提供更多选择。让我们充分利用这些研究成果,提升程序性能,提升用户体验。

详情参考

了解更多有趣的事情:https://blog.ds3783.com/