读写锁这样用对吗?
http://gs.xieyoutx.com/t/t-tz-16653838351264432922-24245167616237927859-19213168136758340598-.html
把上面课程里 关于多线程部分看一遍
你的锁一般不能是类成员,否则每个对象内都有不同的锁。锁通常是跟线程一个层级的才能锁住线程。
能看懂吧?大量线程争夺同一个锁,才能锁住线程, 如果并发线程是各自进入不同的锁,就没有意义了。 读写锁,最主要的还是在写上,写会改变指针长度或指针的地址,这时候去读才是危险的(多线程下)
也就是说导致危险的是写,读是使用最多的
记住一下几点,
1.能不加锁就不要加锁
2.能少加锁就尽量少加锁
3.尽量不要在锁里进行大量计算,尤其是循环,递归(这是最容易导致死锁的地方)
4.锁要有进就要有出,尽量不要在判断分支中不同地方出现进出(容易导致死锁) 本帖最后由 雨中漫步 于 2023-6-1 09:58 编辑
qaz2428119 发表于 2023-6-1 09:44
读写锁,最主要的还是在写上,写会改变指针长度或指针的地址,这时候去读才是危险的(多线程下)
也就是说导致危 ...
不严谨,有些时候,写操作不只是改变大小,还会改变结构,甚至指针改变。
如果出现了读写并行,多数时候就需要保护
哪怕有1000个线程读,有一个线程写,只要有几率同时发生,就有概率出现并发崩溃。
并不是你理解的,只要数据大小不改变就允许读写并行。里面还有细节。
不要误导别人。
读写并行安全的核心点,读写操作并行发生时,资源大小,结构不能有丝毫变化,许多程序编译过程,或者为了提高速度,内存都是预设并复用分配,多数复杂场景并不具备读写并行条件。具体问题具体分析。
使用读写锁就可以读写并行了,是不正确认知,要看具体情况的。不相信就可以跑跑测试,就能验证了。
锁为什么会有很多种,原子锁,读写锁?
因为读写锁有自己的使用场景,用错了必然出问题,多线程的学习要理论先行,理解要充分。
这是个很深的学问,最好是自己能写测试案例来测试并发效果。 太感动了,终于知道为什么不能写变量的时候读了,感谢伙伴们呐!(泪奔::>_<::)编程太难了,好多东西都不知道,只会傻傻的调用个方法。。。 6666666666666666666666666666666 雨中漫步 发表于 2023-6-1 09:50
不严谨,有些时候,写操作不只是改变大小,还会改变结构,甚至指针改变。
如果出现了读写并行,多数时候就 ...
我可没说改变大小没问题, 只读1000条线程并发也没问题,写有两条并发线程就有概率导致崩溃
页:
[1]