我使用 pthread_create 创建了 5 个线程。我想在后台运行这些线程,所以我没有加入这些线程。但该程序产生了奇怪的输出。造成这些的原因是什么?
程序:
for(i = 0; i < 5; i++)
{
pthread_create(&thread[i], NULL, func, &i)
}
最佳答案
一个可能的原因可能是您将指向 i
的指针作为参数传递给线程,并且该指针对于所有线程都是相同的。因此,循环结束后,所有线程的i
将为5
。
您可以使用正确的类型转换将实际值作为指针传递,而不是传递指针:
pthread_create(&thread[i], NULL, func, (void *) i);
并且在线程函数中:
void *func(void *thread_argument)
{
int i = (int) thread_argument;
/* ... */
}
关于c++ - 在c中后台运行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888535/