我尝试以下列方式创建N个线程: 主线程创建一个线程,然后创建另一个线程,等等N次。也就是主线程的子节点创建一个线程,该子节点的子节点创建一个线程,依此类推。我明白怎么做叉子
int p;
int i=1; int N = 10;
do {
p = fork() ;
} while ((p ==0) && (++i<=N));
有没有办法用线程做到这一点?
答案 0 :(得分:4)
阅读一些pthread tutorial&amp; pthreads(7)
您创建了一个pthread_create(3)的线程(它可能会失败)。你给一个例程和一个参数(通常是堆分配的)。与fork
类比。
线程例程本身可以调用pthread_create
。
稍后,您最好在某个地方致电pthread_join(3)(与waitpid
类似),或者使用pthread_detach(3)
请注意,根据定义,同一threads的所有process共享 common address space(以及当前目录,打开的文件描述符表等其他内容) ...)
顺便说一句,你想做的事情通常不常见且容易出错。线程是昂贵的资源!在实践中,您最多应该有几十个线程(使最大可配置,并将其默认为处理器上的核心数),您应该关心同步(使用互斥和条件变量等)。您可能想拥有thread pool。另请阅读producer-consumer problem。