本帖最后由 mylife2014 于 2019-3-8 23:20 编辑
.. 其实每个程序员写代码多了,就越来越多的接触到线程操作,但有个问题就是很多情况线程无法导致某属性,某集合无法同步! 一般正常的思维都丢一个lock 过去,.... 项目一久,一个死锁就够你单步调式一天. 吃过了无数次亏,还是继续用lock .... 一个静态类,这里也lock哪里也lock ,直到现在我每写一个lock 都要重新查下所有lock对像的引用, 心里面过一遍逻辑分析看会不会导致死锁!!! 可见我已经害怕到什么地步!
字码不了多少个,我也不喜欢废话,就是想跟大家分享下我一个快30岁的程序员是怎么懒到不想学习新东西导致踩坑的..
人一上了年纪看人家代码时.都是过了一遍, 没有认真分析逻辑,其实优秀的代码,的确是很有水平的,包含看了下python 都用C#仿了下写法...真的很不错.
最后几句话结尾:
想不想不写lock也随意玩线程?
平时不想学习省来的脑细包能不能还经得住耗吗?
哪么看看下面这几个类吧
ConcurrentQueue(T) ConcurrentStack(T) ConcurrentDictionary(TKey, TValue) ConcurrentBag(T) BlockingCollection(T) IProducerConsumerCollection<T>
[size=13.3333px] 简单的说上面这几个顺就是解决线程访问集合的痛点,用来替代List<T> 或 dic 字典类 ,
但刚开始用这几个类替换项目的list时 发现很多函数没有了,比如clear,add,remove, 其实哪就是你没有真正理解集合的"生产才与消费者","先进先出","后进先出"这些概念, 如果你了解这些思路时,你根本不想用remove 或clear 这些函数,如果你硬要用..哪说明你项目的业务逻辑不恰当. 因为你原来的List 你可能是获取第一个元素后,你又要用一句代码去删除这个元素,就用到了remove() 但是上面几个类是通过一个TryTake(out T value) 来获取的,取到的同时就已经删除了.... 也就是只需要用一句代码就完成了需求,而你原来的List得用好几句代码...
本人口才不行,也不会讲这些类具体干啥,只能引导学习! 大家自己百度吧
|