是否有java.util.concurrent.locks.ReentrantReadWriteLock的C++等价物?

Chr*_*ris 8 c++ java qt multithreading boost

我想控制对一堆数据类的getter和setter的访问,以便可以同时从多个线程安全地访问它们.我之前用java.util.concurrent.locks.ReentrantReadWriteLock在Java中完成了这个,它非常轻松.

但是现在我在当前的C++项目中遇到了很多麻烦,因为我找不到可重入的读/写锁实现.具体来说,我想要一个允许线程获得读锁定的锁,如果它已经有写锁定,没有阻塞并且没有先放弃写锁定.

原因很简单:我的一些setter方法调用getter方法,前者(通常)获取写锁,后者读锁.我不想扭曲我直截了当的getter/setter架构只是为了解决锁类中的限制.

我尝试过Qt(4.8)QReadWriteLock和相关类,以及Boost的unique_lock和shared_lock.两个库都没有实现我需要的重入.Boost的其他部分是否解决了这个问题?

或者是否有其他库有这个?我真的很惊讶Qt和Boost似乎都没有,因为它似乎是一个明显可取的特征.(自2004年以来,它一直是Java标准库的一部分.)

It'*_*ete 4

作为一个涉足 C++ 多线程处理的人,我不确定您是否会在广泛分布的库中找到此功能。据我所知,boost 线程、std 线程和 POSIX 线程不允许这样做。

因此,为了解决您的问题,我建议如下:

  1. 再看看您的锁定方案和您正在共享的数据。还有其他方法可以完成您打算做的事情吗?

  2. 尝试实现您自己的锁定原语版本。它应该只是您选择的任何库中已经可用的基元的相对简单的扩展。另外,请与社区分享,因为我确信您不会是唯一遇到此问题的人。