近看到几篇不错的关于并行计算的文章。感觉不错,给大家推荐一下。并行计算的时代就要来了,大家还是要热热身的。
并行思维 [1] 并行思维 [II] 并行思维 [III]每个软件开发人员都不得不面对并行编程。以前以及现在,我们在完成任务时,首先会考虑选择最佳算法,实现语言等。但现在我们必须首先考虑任务的内在并行性。而这反过来又会影响我们对算法和实现的抉择。如果试着在最后考虑并行,还不如不要思考并行。程序也不能很好的工作。
谈谈多线程编程(一)- 安全性策略在多线程编程中,安全是我们考虑的最重要的因素。通常程序员都会使用锁来满足安全要求,但是只用锁并不能写出良好的多线程代码,因此我们有必要更深入一点,对线程安全策略进行更加全面的了解。
谈谈多线程编程(二)- 不变对象不变对象是指对象的状态在构造后不可改变。这从根本上消除了线程间同步的需求,与锁或者阻塞策略不同的是,不变对象对运行时和设计时不会带来任何额外的开销,因此不变对象是多线程编程中一个很基本的策略。
--------------------------------------------------
下面的这个系列就有点深了,看得有点云里雾里的。 但是,了解一下也无妨。
"Loads are not reorderd with other loads" is a FACT!!下面的两个程序在一个双核的CPU上执行。
P0 P1
========== ==========
X = 1; Y = 1;
R0 = X; R2 = Y;
R1 = Y; R3 = X;
问:如果X, Y 为 volatile 有没有可能使得执行完毕之后 R1 == R3 == 0 呢?
"Loads are not reorderd with other loads" is a FACT!! 续:不要指望 volatile对前一个问题的一种解决方案进行了分析。最后,说明,volatile不能解决那个问题。
"Loads are not reorderd with other loads" is a FACT!! 再续:.NET MM IS BROKEN看过这一片,才算将所有的内容都连在了一起。
今天又看到一篇。这一篇应该和我们的工作比较接近了。
并发数据结构 : .NET Framework 中提供的读写锁
来源:https://www.cnblogs.com/componentworld/archive/2010/07/27/1786140.html