【发布时间】:2012-12-07 19:22:07
【问题描述】:
当您跨不同处理器调度单个线程时,是否每次都必须清除缓存?如果不清除缓存,会不会出现以下情况:
假设您有以下(伪)代码由 2 个处理器 P1 和 P2 执行。
1. foo() {
2. int x=5;
3. x=10;
4. print x;
5. }
最初线程被调度在 P1 上,它执行第 1 行和第 2 行,并将 5 存储在其缓存中作为 x 的内存位置(在堆栈上)。
线程随后被调度到执行第 3 行的 P2 上,并将 10 存储在 其 缓存中以用于 x 的内存位置。
最后,线程再次被调度在 P1 上,并执行第 4 行,打印 5(x 在 P1 的缓存中的值)。
但我们显然希望打印 10 个。
【问题讨论】:
标签: multithreading caching scheduling processor