我想控制对一堆数据类的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标准库的一部分。)
答案 0 :(得分:3)
作为一个涉及使用C ++进行多线程处理的人,我不确定你是否会在广泛分布的库中找到这个功能。据我所知,boost线程,std线程和POSIX线程不允许这样做。
因此,为了解决您的问题,我建议如下:
再看看你的锁定方案和你正在分享的数据。还有另一种方法可以让你完成你要做的事吗?
尝试实现您所寻求的锁定原型的自己版本。它应该只是一个相对简单的扩展,在您选择的任何库中已经可以使用的灵长类动物。此外,与社区分享,因为我相信你不会是唯一一个有这个问题的人。