并发编程中的共享对象、同步及协调问题解析
1. 并发编程的挑战与基础概念
在当今的编程领域,并发架构虽在不断发展,但目前还难以达到顺序架构那样高效的抽象程度,因此程序员在进行并发编程时需格外谨慎。
在并发编程中,共享对象和编程工具是重要的组成部分。不同的对象和工具能帮助我们理解更高层次的问题,例如自旋锁可用于说明争用情况,链表能体现锁在数据结构设计中的作用,这些问题对程序性能有着重要影响。我们期望通过对这些问题的学习,能将所学应用到具体的多处理器系统中。
在编程语言的选择上,这里采用了 Java 语言。当然,也有其他合适的语言可供选择。在附录中会解释 Java 语言所表达的概念如何在其他流行语言或库中体现,同时还会提供多处理器硬件的入门知识。在阐述过程中,我们更关注程序和算法的一般趋势,而非具体的性能数值,因为不同的多处理器系统差异较大,在一台机器上表现良好的程序,在另一台机器上可能效果不佳。
每章结尾会提供参考文献,方便读者进行文献调研和进一步阅读,同时还会有一系列练习,帮助读者检验自己的理解程度。
2. 共享对象与同步的实例分析
假设你刚入职,老板要求你使用支持十个并发线程的并行机器找出 1 到 10¹⁰ 之间的所有素数。由于机器是按分钟计费的,你希望程序运行时间尽可能短。
最初,你可能会考虑给每个线程分配相等的输入范围,让每个线程检查 10⁹ 个数,代码如下:
void primePrint {
int i = ThreadID.get(); // thread IDs are in {0..9}
超级会员免费看
订阅专栏 解锁全文

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



