我是否曾经*不*想要使用 read/write 锁而不是香草互斥锁?
Do I ever *not* want to use a read/write lock instead of a vanilla mutex?
同步对共享资源的访问时,有没有理由 而不是 使用 read/write 锁而不是香草互斥体(这基本上只是一个写锁),除了它具有比我可能需要的更多功能的哲学原因?
换句话说,如果我只是默认 read/write 锁作为我选择的首选同步结构,我是不是搬起石头砸自己的脚?
在我看来,始终选择 read/write 锁并相应地使用读锁与写锁的一个很好的理由是,我可以实现一些同步,然后再也不用考虑它了如果有一天我将代码放到竞争更高的环境中,将来可能会获得更好的性能可扩展性的好处。因此,假设它有潜在的好处而没有实际成本,那么一直使用它是有意义的。这有意义吗?
这是在一个并非真正受资源限制的系统上,它可能更像是一个性能问题。另外,我已经对这个问题进行了一般性的措辞,但如果重要的话,我会特别考虑 Qt 的 QReadWriteLock
和 QMutex
(C++)。
其实归根结底还是你锁拥堵的特点。简单互斥锁的性能明显更好的情况是写入器偏好严重拥塞。
这是一个非常冗长且值得商榷的话题。我可以推荐 Spinlocks and Read-Write Locks and Sleeping Read-Write Locks 阅读,以便您做出明智的决定吗?
实际上,read/write 锁对中的写锁比简单的互斥体更昂贵。 Read/write 锁总是有一些协调策略,在您获取或释放锁时必须应用这些策略。根据特定的实施,此策略可能便宜或昂贵,但它始终存在。
在 QReadWriteLock
的情况下,有一些优先考虑作者的逻辑。尽管这种逻辑的实现可能是高效的,并且没有读者在等待队列中,但它永远不会完全免费。
我不熟悉 QMutex
和 QReadWriteLock
实施的所有细节,但文档说 QMutex
针对非竞争情况进行了大量优化。 QReadWriteLock
暂无此备注。也许是因为他们只是忘记做这样的注释,但也许是因为它在这种情况下的行为不如 QMutex
.
我认为,在最好的情况下,使用 read/write 锁的惩罚可以忽略不计。但在最坏的情况下,当你为每一纳秒而战时,它可能会很明显。
同步对共享资源的访问时,有没有理由 而不是 使用 read/write 锁而不是香草互斥体(这基本上只是一个写锁),除了它具有比我可能需要的更多功能的哲学原因?
换句话说,如果我只是默认 read/write 锁作为我选择的首选同步结构,我是不是搬起石头砸自己的脚?
在我看来,始终选择 read/write 锁并相应地使用读锁与写锁的一个很好的理由是,我可以实现一些同步,然后再也不用考虑它了如果有一天我将代码放到竞争更高的环境中,将来可能会获得更好的性能可扩展性的好处。因此,假设它有潜在的好处而没有实际成本,那么一直使用它是有意义的。这有意义吗?
这是在一个并非真正受资源限制的系统上,它可能更像是一个性能问题。另外,我已经对这个问题进行了一般性的措辞,但如果重要的话,我会特别考虑 Qt 的 QReadWriteLock
和 QMutex
(C++)。
其实归根结底还是你锁拥堵的特点。简单互斥锁的性能明显更好的情况是写入器偏好严重拥塞。
这是一个非常冗长且值得商榷的话题。我可以推荐 Spinlocks and Read-Write Locks and Sleeping Read-Write Locks 阅读,以便您做出明智的决定吗?
实际上,read/write 锁对中的写锁比简单的互斥体更昂贵。 Read/write 锁总是有一些协调策略,在您获取或释放锁时必须应用这些策略。根据特定的实施,此策略可能便宜或昂贵,但它始终存在。
在 QReadWriteLock
的情况下,有一些优先考虑作者的逻辑。尽管这种逻辑的实现可能是高效的,并且没有读者在等待队列中,但它永远不会完全免费。
我不熟悉 QMutex
和 QReadWriteLock
实施的所有细节,但文档说 QMutex
针对非竞争情况进行了大量优化。 QReadWriteLock
暂无此备注。也许是因为他们只是忘记做这样的注释,但也许是因为它在这种情况下的行为不如 QMutex
.
我认为,在最好的情况下,使用 read/write 锁的惩罚可以忽略不计。但在最坏的情况下,当你为每一纳秒而战时,它可能会很明显。