在c中的背景中运行线程

时间:2013-09-19 07:22:45

标签: c++ c linux multithreading pthreads

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

程序:

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

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

}

1 个答案:

答案 0 :(得分:2)

一个可能的原因可能是您将指向i的指针作为参数传递给线程,并且该指针对于所有线程都是相同的。因此,在循环之后,对于所有线程,i将为5


您可以使用正确的类型转换将实际值作为指针传递,而不是传递指针:

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

在线程函数中:

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

    /* ... */
}