gpt4 book ai didi

c - 如果我在循环中创建线程,则前 2 个线程不会被执行

转载 作者:行者123 更新时间:2023-11-30 15:48:09 24 4
gpt4 key购买 nike

我在 Windows 7 计算机中使用 MINGW 进行 POSIX 线程编码。

考虑以下简单代码:

#include <stdio.h>
#include <pthread.h>
#include <process.h>
#define NUM_THREADS 5

void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello Dude...!!!\t I am thread no #%ld\n",tid);
pthread_exit(NULL);
}
int main()
{
pthread_t thread[NUM_THREADS];
int rc;
long t;
for(t=0;t<NUM_THREADS;t++)
{
printf("Inside the Main Thread...\nSpawning Threads...\n");
rc=pthread_create(&thread[t],NULL,PrintHello,(void*)t);
if(rc)
{
printf("ERROR: Thread Spawning returned code %d\n",rc);
exit(-1);
}
}
return 0;
}

上面的程序在我的系统中执行时显示以下输出:

Inside the Main Thread...
Spawning Threads...
Inside the Main Thread...
Spawning Threads...
Hello Dude...!!! I am thread no #0
Inside the Main Thread...
Spawning Threads...
Hello Dude...!!! I am thread no #1
Inside the Main Thread...
Spawning Threads...
Hello Dude...!!! I am thread no #2
Inside the Main Thread...
Spawning Threads...

这个程序应该产生 5 个线程。但它只创建了 2 个线程。前 2 行和最后 2 行表明 pthread_create() 例程即将被调用。由于“rc”变量不是“1”,因此线程创建中毫无疑问会出现任何错误,否则它会遇到“if(rc)”部分。

那么错误在哪里呢?或者是和我的windows机器有关。

最佳答案

没有错误。

你的程序在其他线程有机会输出任何内容之前就退出了,退出你的程序会杀死它的所有线程。

如果您希望所有线程都能正确完成,则需要 pthread_join 所有线程。

关于c - 如果我在循环中创建线程,则前 2 个线程不会被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com