递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库

读写锁这样用对吗?

查看数: 6001 | 评论数: 8 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-6-1 08:27

正文摘要:

回复

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

我可没说改变大小没问题, 只读1000条线程并发也没问题,写有两条并发线程就有概率导致崩溃
008 发表于 2023-6-1 22:43:22
6666666666666666666666666666666
hs999xl 发表于 2023-6-1 18:49:40
太感动了,终于知道为什么不能写变量的时候读了,感谢伙伴们呐!(泪奔::>_<:编程太难了,好多东西都不知道,只会傻傻的调用个方法。。。
创世魂 发表于 2023-6-1 10:13:29
这是个很深的学问,最好是自己能写测试案例来测试并发效果。

评分

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

查看全部评分

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

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

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

不要误导别人。

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

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

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

因为读写锁有自己的使用场景,用错了必然出问题,多线程的学习要理论先行,理解要充分。
qaz2428119 发表于 2023-6-1 09:44:12
读写锁,最主要的还是在写上,写会改变指针长度或指针的地址,这时候去读才是危险的(多线程下)
也就是说导致危险的是写,读是使用最多的
记住一下几点,
1.能不加锁就不要加锁
2.能少加锁就尽量少加锁
3.尽量不要在锁里进行大量计算,尤其是循环,递归(这是最容易导致死锁的地方)
4.锁要有进就要有出,尽量不要在判断分支中不同地方出现进出(容易导致死锁)

评分

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

查看全部评分

雨中漫步 发表于 2023-6-1 09:12:31
能看懂吧?大量线程争夺同一个锁,才能锁住线程, 如果并发线程是各自进入不同的锁,就没有意义了。

评分

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

查看全部评分

雨中漫步 发表于 2023-6-1 08:53:26
http://gs.xieyoutx.com/t/t-tz-16 ... 8136758340598-.html

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

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

评分

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

查看全部评分

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

GMT+8, 2024-11-24 07:44 , Processed in 0.094349 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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