c – 用于读写器锁的boost :: unique_lock和boost :: shared_loc
发布时间:2020-12-16 07:01:52 所属栏目:百科 来源:网络整理
导读:我们已经实现了一个读写器锁 typedef boost::unique_lockboost::shared_mutex WriterLock; typedef boost::shared_lockboost::shared_mutex ReadersLock; 我们有很多多线程读者,只有少数作家. 读者与其他读者共享访问权限但阻止作者. Writer阻塞,直到它具有
我们已经实现了一个读写器锁
typedef boost::unique_lock<boost::shared_mutex> WriterLock; typedef boost::shared_lock<boost::shared_mutex> ReadersLock; 我们有很多多线程读者,只有少数作家. 我们在增强文档中找不到这个… 我们一直看到性能数字似乎表明写入必须等到根本没有读者,而且很少有情况需要很长时间,因为新读者可以在当前读者服务时请求锁定.在这种情况下,似乎在我们的代码中,作者必须等待很长时间才能完全没有读取. 我们更喜欢像系统这样的队列,当写入者请求锁定时,所有当前读者都会耗尽,但所有新的传入读者都会阻止写入者请求. Boost中可升级锁概念的行为是什么? 它没有说它如何处理作家饥饿. 解决方法
@ Guerrero解决方案的一个小改进,增加了多个读者和多个作家的公平性,因此没有人会饿死:
read() { while (atomic-write-requests > 0) condition.wait(); ReadersLock lock(acquireReaderLock()); doRead(); } write() { while (atomic-write-requests > 0) condition.wait(); atomic-write-requests++; WritersLock lock(acquireWriterLock()); doWrite(); atomic-write-requests--; condition.notify(); } 在这个解决方案中,每当作家离开范围时,都会开始一场新的公平竞争. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读