递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 5999|回复: 8
打印 上一主题 下一主题

[视窗] 读写锁这样用对吗?

[复制链接]

73

主题

338

帖子

2015

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2015
跳转到指定楼层
楼主
发表于 2023-6-1 08:27:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式



回复

使用道具 举报

5

主题

86

帖子

427

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
427
QQ
沙发
发表于 2023-6-1 08:53:26 | 只看该作者
http://gs.xieyoutx.com/t/t-tz-16 ... 8136758340598-.html

把上面课程里 关于多线程部分看一遍

你的锁一般不能是类成员,否则每个对象内都有不同的锁。锁通常是跟线程一个层级的才能锁住线程。

评分

参与人数 1金钱 +1 收起 理由
hs999xl + 1

查看全部评分

回复

使用道具 举报

5

主题

86

帖子

427

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
427
QQ
板凳
发表于 2023-6-1 09:12:31 | 只看该作者
能看懂吧?大量线程争夺同一个锁,才能锁住线程, 如果并发线程是各自进入不同的锁,就没有意义了。

评分

参与人数 1金钱 +1 收起 理由
hs999xl + 1

查看全部评分

回复

使用道具 举报

25

主题

497

帖子

1808

积分

金牌会员

Rank: 6Rank: 6

积分
1808
地板
发表于 2023-6-1 09:44:12 | 只看该作者
读写锁,最主要的还是在写上,写会改变指针长度或指针的地址,这时候去读才是危险的(多线程下)
也就是说导致危险的是写,读是使用最多的
记住一下几点,
1.能不加锁就不要加锁
2.能少加锁就尽量少加锁
3.尽量不要在锁里进行大量计算,尤其是循环,递归(这是最容易导致死锁的地方)
4.锁要有进就要有出,尽量不要在判断分支中不同地方出现进出(容易导致死锁)

评分

参与人数 1金钱 +1 收起 理由
hs999xl + 1

查看全部评分

回复

使用道具 举报

5

主题

86

帖子

427

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
427
QQ
5#
发表于 2023-6-1 09:50:37 | 只看该作者
本帖最后由 雨中漫步 于 2023-6-1 09:58 编辑
qaz2428119 发表于 2023-6-1 09:44
读写锁,最主要的还是在写上,写会改变指针长度或指针的地址,这时候去读才是危险的(多线程下)
也就是说导致危 ...

不严谨,有些时候,写操作不只是改变大小,还会改变结构,甚至指针改变。
如果出现了读写并行,多数时候就需要保护
哪怕有1000个线程读,有一个线程写,只要有几率同时发生,就有概率出现并发崩溃。

并不是你理解的,只要数据大小不改变就允许读写并行。里面还有细节。

不要误导别人。

读写并行安全的核心点,读写操作并行发生时,资源大小,结构不能有丝毫变化,许多程序编译过程,或者为了提高速度,内存都是预设并复用分配,多数复杂场景并不具备读写并行条件。具体问题具体分析。

使用读写锁就可以读写并行了,是不正确认知,要看具体情况的。不相信就可以跑跑测试,就能验证了。

锁为什么会有很多种,原子锁,读写锁?

因为读写锁有自己的使用场景,用错了必然出问题,多线程的学习要理论先行,理解要充分。
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40529
6#
发表于 2023-6-1 10:13:29 | 只看该作者
这是个很深的学问,最好是自己能写测试案例来测试并发效果。

评分

参与人数 1金钱 +1 收起 理由
hs999xl + 1

查看全部评分

安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

73

主题

338

帖子

2015

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2015
7#
 楼主| 发表于 2023-6-1 18:49:40 | 只看该作者
太感动了,终于知道为什么不能写变量的时候读了,感谢伙伴们呐!(泪奔::>_<:编程太难了,好多东西都不知道,只会傻傻的调用个方法。。。
回复

使用道具 举报

1

主题

177

帖子

740

积分

高级会员

Rank: 4

积分
740
8#
发表于 2023-6-1 22:43:22 | 只看该作者
6666666666666666666666666666666
回复

使用道具 举报

25

主题

497

帖子

1808

积分

金牌会员

Rank: 6Rank: 6

积分
1808
9#
发表于 2023-6-11 09:55:26 | 只看该作者
雨中漫步 发表于 2023-6-1 09:50
不严谨,有些时候,写操作不只是改变大小,还会改变结构,甚至指针改变。
如果出现了读写并行,多数时候就 ...

我可没说改变大小没问题, 只读1000条线程并发也没问题,写有两条并发线程就有概率导致崩溃
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 05:54 , Processed in 0.107843 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表