【问题标题】:C++11 equivalent of Windows SRWLockC++11 等效于 Windows SRWLock
【发布时间】:2015-03-24 23:26:22
【问题描述】:

我正在尝试使用原子类型实现我自己的读/写锁。我可以轻松定义排他锁,但我无法像 SRWLock 那样为共享读取器线程创建锁(请参阅SRWLock)。我的问题是如何实现可以在独占模式(一次一个读取器/写入器线程)或共享模式(一次多个读取器线程)下使用的锁。

我不能使用std::mutex 锁,因为它不支持多个阅读器。另外我不使用boost,所以也没有shared_mutex

【问题讨论】:

标签: multithreading c++11 atomic


【解决方案1】:

共享定时互斥体

C++11 标准库中没有这种读写锁定的等效项。好消息是在 C++14 中有一个,它叫做shared_timed_mutex

看这里:
http://en.cppreference.com/w/cpp/thread/shared_timed_mutex

编译器支持

如果您使用-std=c++14 编译器标志,则根据its documentation,GCC 的最新版本支持shared_timed_mutex。坏消息是 Visual C++ 还不支持它,或者至少我还没有找到任何关于它的具体信息,我得到的最接近的东西是 this feature table 它说 C++ 中的共享锁定 不见了。

可能的替代方案

如果您使用具有这些原语的库,则可以使用互斥锁和信号量as described in this tutorial 来实现这种事情。

如果您更喜欢使用标准库,您可以使用std::mutexstd::condition_variable 来实现这些东西,类似于how it's done herehere

boost 中也有 shared_mutex(正如您已经指出的),libuv 中还有 uv_rwlock_t,或类 unix 操作系统中的 pthread_rwlock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多