且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

关于锁的讨论

更新时间:2022-10-02 12:03:19

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

本文转自tonyxiaohome 51CTO博客,原文链接: http://blog.51cto.com/tonyxiaohome/198496,如需转载请自行联系原作者