我有一个进程,它根据传递给进程的参数创建多个线程。
producer_threads[num_threads];
for (id = 0; id < num_threads; id++)
{
printf("%d\n", id);
pthread_create(&producer_threads[id], NULL, &produce, (void *) &id);
}
每个线程进入一个生成函数并将 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
和 n 随机为 0、1 或 2。我不确定是什么导致了问题,除非是因为全局变量在本地分配之前已被更新。或者因为“局部变量”是在线程之间共享的。
最佳答案
问题在于您将指向相同变量的指针传递给每个线程。这会产生竞争条件,每个线程看到的变量值取决于确切的计时。
如果您要按值而不是指针传递线程参数,这将解决问题。
关于c - 动态创建线程并传递一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904596/