-2

我使用 pthread_create 创建了 5 个线程。我想在后台运行这些线程,所以我没有加入这些线程。但是该程序正在产生奇怪的输出。这些可能是什么原因?

程序:

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

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

}
4

1 回答 1

2

一个可能的原因可能是您将指针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 回答