- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在同步访问共享资源时,是否有理由不使用读/写锁而不是普通的互斥锁(基本上只是写锁),除了它具有比我可能需要的更多功能的哲学原因?
换句话说,如果我只是默认使用读/写锁作为我首选的同步结构,我是不是在踢自己?
在我看来,总是选择读/写锁并相应地使用读锁和写锁的一个很好的理由是,我可以实现一些同步,然后在获得更好性能的可能好处的同时永远不必再考虑它如果有一天我把代码放到一个竞争更激烈的环境中,那么将来的可扩展性。因此,假设它具有潜在的好处而没有实际成本,那么一直使用它是有意义的。那有意义吗?
这是在一个并非真正资源有限的系统上,这可能更多是一个性能问题。我也对这个问题进行了概括,但我有 Qt 的 QReadWriteLock
和 QMutex
(C++) 特别记住,如果它很重要。
最佳答案
实际上,读/写锁对中的写锁比简单的互斥锁更昂贵。读/写锁总是有一些协调策略,当您获取或释放锁时必须应用这些策略。根据特定的实现,此策略可能便宜或昂贵,但它始终存在。
如果是 QReadWriteLock
,有一些逻辑优先考虑作家。尽管这种逻辑的实现可能是有效的,并且等待队列中没有读者,但它永远不会完全免费。
我不熟悉 QMutex
的所有细节和 QReadWriteLock
实现,但文档说 QMutex
针对非争用情况进行了大量优化。 QReadWriteLock
没有这样的评论。可能是因为他们忘了做这样的笔记,也可能是因为它在这种情况下的表现不如QMutex
.
我认为,在最好的情况下,使用读/写锁的惩罚可以忽略不计。但在最坏的情况下,当你为每一纳秒而战时,它可能会很明显。
关于multithreading - 我是否曾经*不想*想使用读/写锁而不是普通的互斥锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496504/
当我使用 Google 可视化库创建可视化时,这是一个持续的恶化: 此图的左侧和右侧至少有 75 像素,顶部和底部还有 30-40 像素。馅饼本身没有理由不能更大,当我提供足够的空间时,右边的图例也没
我正在将我的应用程序转移到另一台服务器,但我遇到了一些似乎没有过期的 PHP session 问题。 在 php.ini 中我设置了: session.gc_probability = 1 sessi
关闭。这个问题需要更多 focused 。它目前不接受答案。 想要改进这个问题?更新问题,使其只关注 editing this post 的一个问题。 关闭 9 年前。 Improve this q
有时在项目结束时我会想“哇,我刚刚为那个项目写了很多行代码。”但我永远不知道到底有多少。 有什么方法可以实际列出自创建以来添加到 repo 中的所有代码行吗? 我认为那种东西看起来会很有趣。 编辑:我
我并不完全理解 Apple 的 iOS 4 模型,我已经研究了几个小时的文档,但我仍然感谢一些帮助。 后台 iPhone 应用程序会退出吗?例如,当我关闭 Loopt 等位置跟踪应用程序时,它将进入后
一些背景 我目前正在开发一个移动网站,因此我一直在 Firefox 中使用 User Agent switcher 切换用户代理。 (可爱的插件)。但是当我转到管理站点时,它呈现为 WML ,这让 F
我是一名优秀的程序员,十分优秀!