Skip to content

并发

字数
370 字
阅读时间
2 分钟

多处理器编程:从入门到放弃

阅读创建进程代码。

如何证明线程具有共享内存? 如何证明线程具有独立堆栈以及栈的大小?

并发执行三个 T_sum,sum 的最小值是多少?

  • 初始时 sum = 0; 假设单行语句的执行是原子的
c++
void T_sum() { 
	for (int i = 0; i < 3; i++) { 
		int t = load(sum); 
		t += 1; 
		store(sum, t); 
	} 
}

Model Checker: sum = 2

  • 是的,不是 1
    • (因为有 i 的循环)
  • 也不是 3
    • 虽然 sum = 3 是很容易想到的
  • 无论有多少 T_sum,都可以 sum = 2(很有意思)

现代处理器也是编译器,处理器可以调换指令的执行顺序,只要这些指令在单处理器的条件下,调换顺序执行后执行仍是一样的。

head -n 10000 | sort | uniq -c 取前10000行数据,按字符串排序,统计不同类型的数量。

互斥

单处理器和多处理器的比较:

  • Amdahl's Law
  • Gustafson's Law

通过关中断实现原子性。

有一些是不可屏蔽中断。避免如果执行具有原子性的指令时,指令有Bug,系统卡死的情况。

中断是每个处理器独享的,不是所有处理器共享中断。

Peterson算法

贡献者

The avatar of contributor named as Yiming Li Yiming Li

文件历史

撰写