我有一个基于传递给进程的参数创建多个线程的进程。
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。我不确定是什么导致了问题,除非是因为全局变量在本地分配之前正在更新。或者因为“局部变量”在线程之间共享。