我想控制对一堆数据类的 getter 和 setter 的访问,以使它们可以同时从多个线程安全地访问。我之前在 Java 中使用 java.util.concurrent.locks.ReentrantReadWriteLock 完成了这项工作,而且非常轻松。
但是现在我在当前的 C++ 项目中遇到了很多麻烦,因为我找不到可重入读/写锁实现。具体来说,我想要一个允许线程在已经拥有写锁的情况下获得读锁,而不会阻塞,也不会首先放弃写锁。
原因很简单:我的一些 setter 方法调用 getter 方法,前者(通常)获得写锁,后者获得读锁。我不想为了解决锁类中的限制而扭曲我简单的 getter/setter 架构。
我已经尝试过 Qt (4.8) QReadWriteLock 和相关类,以及 Boost 的 unique_lock 和 shared_lock。两个库都没有实现我需要的可重入性。Boost 的其他部分是否解决了这个问题?
或者有没有其他图书馆有这个?我真的很惊讶 Qt 和 Boost 似乎都没有,因为它似乎是一个明显可取的功能。(自 2004 年以来,它一直是 Java 标准库的一部分。)