并发
字数
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,系统卡死的情况。
中断是每个处理器独享的,不是所有处理器共享中断。