- 论坛徽章:
- 11
|
进程切换的时候,必然是需要一个同步点的,这是一个一般原则。
multipul processor memory consistency ...
塑料袋 发表于 2011-10-14 16:09 ![]()
就等你呢, 那么现在一个基本问题: 缺乏 barrier 造成的代码重排, 可能导致
thread A:
ptr->buf = malloc();
ptr->flag = 1;
thread B:
if(ptr->flag == 1){
memcpy(ptr->buf, ...)
}
会不会存在???
另一个问题:
CPU 乱序执行, 如果ptr->flag = 1先执行了, 但前一个还没有执行, 在X86 下, 很显然这个执行结果不会传出 CPU外, 那么同时CPU2 执行到 if(ptr->flag == 1), CPU2能不能即时得到 flag == 1 为 true 的消息???
第三个问题:
如果不是X86, 有没有可能 ptr->flag 能够先传出 CPU外而被 CPU2得知?
以上两种情况如果答案都是true, 都会导致memcpy(ptr->buf, ...), CPU如何防止这种结果 |
|