所读的文章链接在这里 或者最初的出处是在这里 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的研究: