并发编程中的共享对象、同步及协调问题解析
1. 并发编程概述与风格说明
在未来,并发架构或许能像顺序架构一样提供高效的抽象。在此之前,程序员需要谨慎对待并发编程。在并发编程中,有一系列共享对象和编程工具,每个对象和工具都有其独特之处,能帮助我们理解更高级的问题,例如自旋锁可说明争用问题,链表能展现锁在数据结构设计中的作用等,这些问题对程序性能有重要影响,希望大家能将所学应用到具体的多处理器系统中,最后还会探讨诸如事务内存等先进技术。
在编程风格上,采用 Java 编程语言。当然,也有其他合适的语言,但选择 Java 有诸多原因,详细原因可慢慢探讨。在附录中会说明 Java 中的概念如何在其他流行语言或库中表达,同时还会提供多处理器硬件的入门知识。在讲解过程中,不会给出具体程序和算法的性能数值,而是关注一般趋势,因为多处理器差异大,在一台机器上效果好的,在另一台可能不佳,关注一般趋势能保证观点的长期有效性。每章末尾会提供参考文献和相关资料的书目调查,还有练习题供大家检验理解程度或在闲暇时练习。
2. 共享对象与同步问题
假设新工作第一天,老板让用支持十个并发线程的并行机器找出 1 到 10¹⁰ 之间的所有素数,机器按分钟计费,程序运行时间越长成本越高,该怎么做呢?
2.1 初次尝试:划分输入域
最初可能会让每个线程处理相等范围的输入,每个线程检查 10⁹ 个数,代码如下:
void primePrint {
int i = ThreadID.get(); // thread IDs are in {0..9}
int bl
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



