Я написал многопоточную программу, чтобы продемонстрировать эффект выхода процессора Intel из строя. Программа прикреплена в конце поста. Ожидаемый результат должен заключаться в том, что когда x будет распечатан как 42 или 0 обработчиком1. Однако фактический результат всегда равен 42, а это означает, что эффекта нарушения порядка не происходит.
Я скомпилировал программу с помощью команды «gcc -pthread -O0 out-of-order-test.c». Я запускаю скомпилированную программу на Ubuntu 12.04 LTS (ядро Linux 3.8.0-29-generic) на процессоре Intel IvyBridge Intel (R ) Процессор Xeon (R) E5-1650 v2.
Кто-нибудь знает, что мне делать, чтобы увидеть эффект выхода из строя?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int f = 0, x = 0;
void* handler1(void *data)
{
while (f == 0);
// Memory fence required here
printf("%d\n", x);
}
void* handler2(void *data)
{
x = 42;
// Memory fence required here
f = 1;
}
int main(int argc, char argv[])
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, handler1, NULL);
pthread_create(&tid2, NULL, handler2, NULL);
sleep(1);
return 0;
}