В классе мы изучаем темы и условия гонки.По моим оценкам, для приведенного ниже кода должна быть возможность вывести значение 8 или 9, поскольку вполне возможно, что поток 1 прерывается потоком 2 до обновления значения счетчика, но после его увеличения в регистре eax.
int counter = 10;
void *worker(void *arg) {
counter--;
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t p1, p2;
pthread_create(&p1, NULL, worker, NULL);
pthread_create(&p2, NULL, worker, NULL);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
printf("%d\n", counter);
}
Однако, когда я запускаю код, я всегда получаю выходные данные 8. Это механизм компилятора, который нормализует выходные данные, или это возможно только для кода, чтобы вывести 8 (без гонкиусловие создано)?