Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我是否不想使用读/写锁而不是普通的互斥锁?

我是否不想使用读/写锁而不是普通的互斥锁?
EN

Stack Overflow用户
提问于 2016-09-14 09:36:03
回答 2查看 1.4K关注 0票数 6

当同步访问共享资源时,是否有理由不使用读/写锁而不是普通的互斥锁(这基本上只是一个写锁),除了它具有比我可能需要的更多特性的哲学原因吗?

换句话说,如果我只是默认地将读/写锁作为我首选的同步结构,那么我是在朝自己开枪吗?

在我看来,总是选择读/写锁并相应地使用读/写锁的一个很好的理由是,我可以实现一些同步,如果有一天我将代码放到一个更高争用的环境中,那么我就不必再考虑它,同时获得更好的性能可伸缩性的好处。因此,假设它在没有实际成本的情况下有潜在的好处,那么一直使用它是有意义的。这有意义吗?

这是在一个资源有限的系统上,它可能更多的是一个性能问题。此外,我已经概括了这个问题,但我特别想到了Qt的QReadWriteLockQMutex (C++),如果这很重要的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-14 10:16:03

实际上,读/写锁对中的写锁比简单的互斥锁要昂贵得多。读/写锁总是有一些协调策略,在获取或释放锁时必须应用这些策略。根据具体的实现情况,这种策略可以是廉价的,也可以是昂贵的,但它总是存在的。

QReadWriteLock的情况下,有一些逻辑赋予作者优先权。尽管这种逻辑的实现可能是有效的,而且等待队列中没有读者,但它从来都不是完全免费的。

我不太熟悉QMutexQReadWriteLock实现的所有细节,但文档指出,QMutex是针对非竞争情况进行了大量优化的。QReadWriteLock没有这样的评论。也许是因为他们忘了做这样的事,但也许是因为在这种情况下,它的行为不如QMutex那么好。

我认为,在最好的情况下,使用读/写锁的代价是可以忽略的。但在最坏的情况下,当你为每一纳秒而战时,它可能是值得注意的。

票数 2
EN

Stack Overflow用户

发布于 2016-09-14 10:05:20

它确实归结为你的锁堵塞的特点。如果简单互斥对象表现得更好,则会出现严重的拥塞和作者偏好。

这是一个非常冗长和有争议的问题。我可以推荐自旋锁和读写锁睡眠读写锁读物,这样你才能做出明智的决定吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39496504

复制
相关文章
独占锁(写锁)/共享锁(读锁)/互斥锁
独占锁:指该锁一次只能被一个线程所持有。对ReentrantLock和Synchronized而言都是独占锁
名字是乱打的
2022/05/13
1.4K0
独占锁(写锁)/共享锁(读锁)/互斥锁
[Java 并发]读锁/写锁
之前我们都知道在一个变量被读或者写数据的时候每次只有一个线程可以执行,那么今天我们来看一下读写锁,读写两不误ReadWriteLock。
YanL
2020/04/29
1K0
[Java 并发]读锁/写锁
互斥锁-读写锁-条件锁
不能拷贝互斥量变量,但可以拷贝指向互斥量的指针,这样就可以使多个函数或线程共享互斥量来实现同步。上面动态申请的互斥量需要动态的撤销。
CC老师
2023/03/23
8240
互斥锁-读写锁-条件锁
go 互斥锁和读写互斥锁
互斥锁是一种常用的控制共享资源访问的方法,它能够保证同时只有一个goroutine可以访问共享资源。Go语言中使用sync包的Mutex类型来实现互斥锁。 定义一个锁:
TomatoCool
2023/09/14
2300
Redis 互斥锁使用
Redis的互斥锁是一种并发控制机制,用于确保在分布式环境中只有一个客户端能够访问共享资源,以防止竞争条件和数据不一致性。互斥锁是通过Redis提供的原子性操作来实现的,通常使用SETNX(SET if Not eXists)命令或者SET命令结合过期时间来实现。以下是关于Redis互斥锁的详细介绍:
孟斯特
2023/10/25
1K0
Redis 互斥锁使用
互斥锁
  当一组线/进程中的每个线/进程都在等待某个事件发生,而只有这组线/进程中的其他进程才能触发该事件,这就称这组线/进程发生了死锁。
py3study
2020/01/17
8200
自旋锁和互斥锁区别在哪_互斥锁的实现
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。
全栈程序员站长
2022/11/01
1K0
Golang中互斥锁和读写互斥锁
        在Golang中,互斥锁(Mutex)是一种基本的同步原语,用于实现对共享资源的互斥访问。互斥锁通过在代码中标记临界区来控制对共享资源的访问,从而保证同一时间只有一个 goroutine 可以访问共享资源,避免了并发访问时的数据竞争和不一致性问题。
周小末天天开心
2023/10/16
3170
sql serve2008是否自带互斥锁
近期突然想到,一道珠海笔试题,让你写atm机的逻辑,当时想多了,以为重点是让你写清楚其中的事务互斥关系,当时也忘记数据库是否会自动互斥,从而不会出现脏数据。所以就敲了个代码实践了下。
forxtz
2020/10/10
4100
Mutex(互斥锁)
在信号量最后的部分说,当count=1的时候可以用信号量实现互斥。在早期的Linux版本中就是当count=1来实现mutex的。
DragonKingZhu
2020/03/24
2K0
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,所以我们通常为了解决这一问题,都会在访问共享资源之前加锁。
Vincent-yuan
2021/10/09
1.5K0
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
互斥锁与读写锁:如何使用锁完成Go程同步?
这张图容易让人产生误解,容易让人误以为goroutine1获取的锁,只有goroutine1能释放,其实不是这样的。“秦失其鹿,天下共逐之”。在这张图中,goroutine1与goroutine2竞争的是一种互斥锁。goroutine1成功获取锁以后,锁变成锁定状态,此时goroutine2也可以解锁。
LIYI
2021/01/26
1.1K0
读时加写锁,写时加读锁,Eureka可真的会玩
在对于读写锁的认识当中,我们都认为读时加读锁,写时加写锁来保证读写和写写互斥,从而达到读写安全的目的。但是就在我翻Eureka源码的时候,发现Eureka在使用读写锁时竟然是在读时加写锁,写时加读锁,这波操作属实震惊到了我,于是我就花了点时间研究了一下Eureka的这波操作。
三友的java日记
2022/12/20
5560
读时加写锁,写时加读锁,Eureka可真的会玩
MYSQL 我说的那个锁,不是你的那个锁
下面画了一个图,图中是MYSQL 中提供的锁的类型从图中可以看到 IS意向锁可以和除X锁的其他锁类型共存, X 锁则是和任何锁都是互斥的,和他本身也是一样,AI 锁 只和意向锁共存。
AustinDatabases
2019/09/27
9390
MYSQL  我说的那个锁,不是你的那个锁
Go语言互斥锁和读写锁
一、互斥锁 Go语言中多个协程操作一个变量时会出现冲突的问题 go run -race 可以查看竞争 可以使用sync.Mutex对内容加锁 互斥锁的使用场景 多个goroutine访问同一个函数(代码段) 这个函数操作一个全局变量 为了保证共享变量安全性,值合法性 使用互斥锁模拟售票窗口 package main import ( "fmt" "sync" "time" "math/rand" ) var ( //票数 num = 100 wg sync.W
IT工作者
2022/03/31
7330
Qt多线程:使用互斥锁
即使用户同时调用两个函数,在同一时刻,也只会执行一个函数内操作number的代码。
全栈程序员站长
2022/07/23
8600
常见的Java锁总结:公平锁,独享锁,互斥锁,乐观锁,分段锁,偏向锁,自旋锁等等
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:
程序员追风
2021/03/18
1.8K0
Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:
java思维导图
2019/11/04
5590
[Go] golang互斥锁mutex
1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码 2.Lock()和Unlock()定义临界区
唯一Chat
2019/09/10
9430
liteos互斥锁(七)
互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。
233333
2019/06/03
1.2K0

相似问题

读锁写锁

34

读/写锁

104

是否有读自旋锁和写自旋锁?

10

只写互斥锁

45

文件读/写锁

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文