У меня есть процесс, который создает несколько потоков на основе аргумента, переданного процессу.Динамическое создание потоков и передача целого числа
producer_threads[num_threads];
for (id = 0; id < num_threads; id++)
{
printf("%d\n", id);
pthread_create(&producer_threads[id], NULL, &produce, (void *) &id);
}
Каждый поток идет в функцию продукции и сохраняет идентификатор в качестве локальной переменной
void* produce (void* args)
{
int my_id = * (int*) args;
printf("Thread %d started to produce\n", my_id);
}
Однако выход я получаю это, как показано
0
1
Thread <n> started to produce
Thread <n> started to produce
и п случайным образом либо 0 , 1 или 2. Я не уверен, что вызывает проблему, если это не потому, что глобальная переменная обновляется до того, как она назначена локально. Или потому, что «локальная переменная» делится между потоками.