c++ - C++ 中的读/写锁

标签 c++ multithreading locking

我正在寻找一个好的 C++ 读/写锁。我们有一个不常写者和许多常读者的用例,并希望对此进行优化。最好我想要一个跨平台的解决方案,但是只有一个 Windows 是可以接受的。

最佳答案

从 C++ 17 (VS2015) 开始可以使用标准:

#include <shared_mutex>

typedef std::shared_mutex Lock;
typedef std::unique_lock< Lock >  WriteLock;
typedef std::shared_lock< Lock >  ReadLock;

Lock myLock;

void ReadFunction()
{
     ReadLock r_lock(myLock);
     //Do reader stuff
}

void WriteFunction()
{
     WriteLock w_lock(myLock);
     //Do writer stuff
}

对于较旧的编译器版本和标准,您可以使用 boost 创建读写锁:

#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>

typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock >  WriteLock;
typedef boost::shared_lock< Lock >  ReadLock;

关于c++ - C++ 中的读/写锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/244316/

相关文章:

c++ - 我正在尝试在 If 语句中使用数组

.net - SemaphoreSlim.Wait( CancellationToken ) 对OperationCancelledException 进行正确的try/finally 吗?

java - 为什么在这个例子中 var 没有增加?

java - 对象锁定私有(private)类(class)成员 - 最佳实践? ( java )

mysql - MySQL InnoDB 事务期间的锁定

c++ - 前向 boost::从访问者到另一个访问者的变体

c++ - argc 和 argv 的 void cast

c++ - 为什么 GCC 交叉编译器不能找到所有的库?

JavaFx - 不想出现结束对话框

PHP - AJAX - 为什么文件访问是顺序的 - 无 session