-2

pthread_create を使用して 5 つのスレッドを作成しました。これらのスレッドをバックグラウンドで実行したいので、これらのスレッドには参加しませんでした。しかし、プログラムは奇妙な出力を生成しています。これらの理由は何ですか?

プログラム:

for(i = 0; i < 5; i++)
{

pthread_create(&thread[i], NULL, func, &i)

}
4

1 に答える 1

2

考えられる理由の 1 つiは、スレッドへの引数としてポインターを渡し、そのポインターがすべてのスレッドで同じになることです。したがって、ループの後、すべてのスレッドi5対象になります。


ポインターを渡す代わりに、正しい型キャストを使用して、実際の値をポインターとして渡すことができます。

pthread_create(&thread[i], NULL, func, (void *) i);

そしてスレッド関数で:

void *func(void *thread_argument)
{
    int i = (int) thread_argument;

    /* ... */
}
于 2013-09-19T07:26:48.260 に答える