关于锁的讨论

本文探讨了在并发编程中如何通过设计避免锁的过度使用,包括在读取操作中去除锁、利用线程局部变量及异步处理等技巧。此外,还讨论了在必须使用锁的情况下如何提高效率。

我觉得玩锁的最高境界,就是不用锁。
锁其实是为了解决并发访问时,乱序写动作造成的数据不一致问题。
细分下来,很多时候可以不用锁的。
1、针对一个资源所有的操作都是读的时候。
2、只有一个线程访问的时候,即资源只有唯一持有人。
3、同一时刻只有一个线程访问的时候,即串行访问模式。
既然有这么多方法,其实在系统设计时,我们可以通过精心设计,规避很多使用锁的时候。
如:
1、对于很多查表运算,表在程序Init的时候就初始化成功,之后只读,则不需要加锁。
2、对于线程自己的变量,无其他人访问,不需要加锁。
3、利用事务批处理机,事务处理队列,将同步动作改为异步动作,资源的访问永远具有唯一性,则也不需要加锁。
另外,就算一个资源真的读写频繁,需要加锁,也有很多提高效率的方法的。
单写多读锁是个很明显的例子,即读并发,写互斥。
另外,很多时候,锁不一定要做成锁的样子的,如被动资源池的构建,其效率很难平衡,如果参照锁的理论,用二元动作定义访问,则可以很好地解决资源的并发争用问题。兼顾稳定性和效率的平衡。
此时,虽然我们做的是一个池子,但实际上用法和一个锁的用法是一样的。它也叫锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值