Я изучаю потоки POSIX прямо сейчас, но я думаю, что это всего лишь общий вопрос о многопоточности, поэтому я надеюсь, что кто-нибудь может мне помочь. У меня есть пример из книги, над которой я работаю, которая демонстрирует состояние гонки:
void *thread_main(void *thread_number) {
printf("In thread number %d.\n", *(int *)thread_number);
}
void main() {
int i = 0;
pthread_t thread;
for( i = 0; i < 10; i++ ) {
printf("Creating thread %d.\n");
pthread_create(&thread, 0, thread_main, &i);
printf("Created thread %d.\n");
}
}
Есть несколько вещей, которые я не понимаю по этому поводу. Сначала «В теме № 5». печатается много раз, даже если это не должно быть в потоке номер 5. В книге, пример показывает, что поток 8 печатается много раз. Я также не понимаю ту часть, которая говорит *(int *)thread_number
. Я попытался изменить это на номер_потока, но это снова и снова давало мне странные числа.
Книга на самом деле не объясняет этого. Может кто-нибудь дать мне четкое объяснение того, что здесь происходит? Я не понимаю, почему он не печатает что-то вроде:
> Creating thread 1.
> In thread number 1.
> Created thread 1.
> Creating thread 2.
> In thread number 2.
> Created thread 2.
Я знаю это, потому что он многопоточный: «В потоке с номером x». часть будет приходить в разное время, но я действительно не понимаю, почему нет точно 10 «В номере нити x» с одной строкой для каждого потока, который я создал!
~ Дези