プロセスに渡された引数に基づいて多数のスレッドを作成するプロセスがあります。
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のいずれかです。グローバル変数がローカルに割り当てられる前に更新されているためでない限り、問題の原因はわかりません。または、「ローカル変数」がスレッド間で共有されているためです。