У меня есть эта программа:
void *func(void *arg) {
pthread_mutex_lock(&mutex);
int *id = (int *)arg;
printf("My ID is %d\n" , *id);
pthread_mutex_unlock(&mutex);
}
int main() {
int i;
pthread_t tid[3];
// Let us create three threads
for (i = 0; i < 3; i++) {
pthread_create(&tid[i], NULL, func, (void *)&i);
}
for (i = 0; i < 3; i++) {
pthread_join(tid[i], NULL);
}
pthread_exit(NULL);
return 0;
}
Я ожидал, что она выведет это:
My ID is 0
My ID is 1
My ID is 2
Но вместо этого я получаю случайный вывод, такой как:
My ID is 0
My ID is 0
My ID is 2
Поскольку я уже добавил блокировку мьютекса, я подумал, что это решит проблему.Что еще я сделал не так?Это связано с расой?