并发编程中的共享对象、同步与协调协议
1. 并发编程的挑战与共享对象
在当今的编程领域,并发架构虽有发展,但尚未能像顺序架构那样提供高效的抽象。程序员在进行并发编程时需格外谨慎。在并发编程中,共享对象和编程工具至关重要。例如,自旋锁能说明竞争问题,链表能体现锁在数据结构设计中的作用,这些问题都对程序性能有重要影响。
在编程语言的选择上,这里采用Java语言。当然,也有其他合适的语言,但选择Java有诸多原因,具体可在闲暇时深入探讨。同时,还会在附录中说明Java中的概念如何在其他流行语言或库中表达,并提供多处理器硬件的入门知识。为保证内容的时效性,避免给出具体的程序和算法性能数字,而是注重一般性趋势。
2. 共享对象与同步实例:寻找质数问题
假设你刚入职,老板要求你使用支持10个并发线程的并行机器找出1到$10^{10}$之间的所有质数。由于机器按分钟计费,你希望程序运行时间尽可能短。
2.1 平均分配输入域的尝试
首先,你可能会考虑给每个线程分配相等的输入域,即每个线程检查$10^{9}$个数,代码如下:
void primePrint {
int i = ThreadID.get(); // thread IDs are in {0..9}
int block = power(10, 9);
for (int j = (i * block) + 1; j <= (i + 1)* block; j++) {
if (isPrime(j))
print(j);
超级会员免费看
订阅专栏 解锁全文
170万+

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



