В настоящее время я пишу простой код на C, используя pthreads.Все, что он делает, это создает 2 потока, и каждый поток складывает половину массива целых чисел, чтобы получить общую сумму массива.Однако по какой-то причине всякий раз, когда я запускаю код без задержки между созданием потока, вторая половина массива добавляется дважды.Добавление минимальной задержки решает проблему, но мне любопытно, почему это происходит.Вот код, который я использую для создания потоков:
for(i = 0; i < THREAD_NUM; ++i){
args.thread_num = i;
if(pthread_create(&threads[i], NULL, getSum, (void *)&args) != 0)
printf("Can't create thread\n");
//usleep(1);
}
Числа, которые я добавляю, это числа от 0 до 7, и я ожидаю, что сумма будет 28. Но по какой-то причине, без задержки, ответ44, который является суммой чисел с 4 по 7, добавленных дважды, другими словами, вторая половина массива.С usleep
без комментария ответ - 28. Может ли кто-нибудь дать представление о том, что происходит.Спасибо.