С другой стороны, а вот где в этой самой документации написано, что операция записи, которую делат один процессор, будет вообще хоть когда-то видна другому процессору? :-)
Типа, почему должен выйти следующий цикл?
thread A: for(;;) if(flag==1) break;
thread B: flag=1;
Он, кстати, может и не выйти, если не объявить flag как volatile - оптимизатор этот самый цикл может переделать так, что flag будет читаться один раз.
Спрашивается - а почему подобная оптимизация не произойдет на уровне железа процессора? Где об этом сказано в документации?
no subject
С другой стороны, а вот где в этой самой документации написано, что операция записи, которую делат один процессор, будет вообще хоть когда-то видна другому процессору? :-)
Типа, почему должен выйти следующий цикл?
thread A:
for(;;)
if(flag==1)
break;
thread B:
flag=1;
Он, кстати, может и не выйти, если не объявить flag как volatile - оптимизатор этот самый цикл может переделать так, что flag будет читаться один раз.
Спрашивается - а почему подобная оптимизация не произойдет на уровне железа процессора? Где об этом сказано в документации?