当前位置:   article > 正文

【读书笔记】 多线程程序常见bug

ef 多线程更新 unexpected connection state

所读的文章链接在这里 或者最初的出处是在这里   http://www.parallellabs.com/2010/11/23/concurrency-bugs-2/

多线程的东东之前也接触过一些,自己在写这方面代码时也是格外谨慎,常常考虑的是加锁避免死锁的问题,加锁影响性能的问题,还有线程/进程间通信的问题。

在这篇文章中,作者总结说多线程中程序bug一般有三类,死锁,违反原子性操作和违反SC(sequentail consistency);

或者用文中的表达方式就是: deadlock, atomicity violation and ordering violation.  已经有不少工具可以帮助程序员发现deadlock,但是后两个就需要依靠程序员的自觉啦。。这个让我想起GPU下的编程。。。

这里作者举出的例子都很好,浅显易懂,解决方法有不少,例如变量私有化,加锁等,来解决ordering violation OR atomicity violation的问题。

我的感受是加锁是一个颇有通用性的方法,因为加锁是一种逻辑处理上的倒退,强行将并行处理逼退到串行时代,所以加锁不是随心所欲挥霍无度的,而都是用在最需要它的地方。加锁在将带来串行化的同时,自然会解决由于并行化而引入的各种问题。

但是,

没有免费午餐,加锁会带来性能的损失,这个显而易见,这个缺点是相对于程序员的贪婪而言的,既要并行处理的性能收益,还不要并行处理引入的数据竞争问题。funny。这就涉及到了无锁处理,而这一问题还是可以作为国内top10大学的博士毕业论文主题的。颇有挑战的一个问题,但是我认为他是对于程序编写的一种改进,并不会从根本上解决并行处理中引入的数据竞争问题,至多是将本可以私有化的数据变为线程私有,或者引入轻量级的锁,如利用cache的一致性所形成的锁/同步机制;

也许是我的理解有误。

继续学习。药不能停哈哈哈^_^

 

最后记录两位教授的链接,可以看看学术界对于mutli-threading的研究:

http://pages.cs.wisc.edu/~shanlu/#research

http://cseweb.ucsd.edu/~yyzhou/

 

转载于:https://www.cnblogs.com/superniaoren/p/3350593.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/721089
推荐阅读
  

闽ICP备14008679号