c++ - 在c中后台运行线程

标签 c++ c linux multithreading pthreads

我使用 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/

相关文章:

c++ - Visual Studio C++ 调试包含静态库的 DLL

linux - 登录时显示主机名(无)

c++ - 在 STXXL 中结合流和迭代

c++ - 从 C++ 到 C 的转换

c - FastCGI 和 Unicode

c - 如何知道后台运行的进程是否完成

c - 将操作数放在 getopt() 的前面

linux - 根据负载估算所需的核心容量?

c++ - 删除 vector 的尾部(通过删除)内存效率高吗?

c++ - 为什么 msvc 让我这样做而不是 gcc/g++?