Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中创建N个线程_C_Multithreading_Pthreads - Fatal编程技术网

在C中创建N个线程

在C中创建N个线程,c,multithreading,pthreads,C,Multithreading,Pthreads,我尝试以下列方式创建N个线程: 主线程创建一个线程,该线程又创建另一个线程,以此类推N次。也就是说,主线程的子线程创建一个线程,该子线程的子线程创建一个线程,以此类推。我知道怎么做 int p; int i=1; int N = 10; do { p = fork() ; } while ((p ==0) && (++i<=N)); intp; int i=1;int N=10; 做{ p=fork(); }而((

我尝试以下列方式创建N个线程: 主线程创建一个线程,该线程又创建另一个线程,以此类推N次。也就是说,主线程的子线程创建一个线程,该子线程的子线程创建一个线程,以此类推。我知道怎么做

     int p;
     int i=1; int N = 10;
     do {
         p = fork() ;
     } while ((p ==0) && (++i<=N));
intp;
int i=1;int N=10;
做{
p=fork();
}而((p==0)和(++i读一些&)

使用创建线程(可能会失败)。提供例程和参数(通常为堆分配)。类似于
fork

线程例程本身可以调用
pthread\u create

稍后,您最好调用某个地方(类似于
waitpid
),或者使用

请记住,根据定义,所有相同的文件共享一个公共文件(以及其他内容,如当前目录、打开的文件描述符表等)

顺便说一句,你想做的事情通常不常见,而且容易出错。线程是昂贵的资源!在实践中,你最多应该有几十个线程(使最大线程数可配置,并默认为处理器上的内核数),并且你应该关心同步(使用互斥锁和条件变量等)。您可能想让您的。也可以阅读。

阅读一些&

使用创建线程(可能会失败)。提供例程和参数(通常为堆分配)。类似于
fork

线程例程本身可以调用
pthread\u create

稍后,您最好调用某个地方(类似于
waitpid
),或者使用

请记住,根据定义,所有相同的文件共享一个公共文件(以及其他内容,如当前目录、打开的文件描述符表等)


顺便说一句,你想做的事情通常不常见,而且容易出错。线程是昂贵的资源!在实践中,你最多应该有几十个线程(使最大线程数可配置,并默认为处理器上的内核数),并且你应该关心同步(使用互斥锁和条件变量等)。你可能想让你的。也阅读。

好的,是的。你读过pthreads文档/示例吗?为什么你需要线程的层次结构而不是从主线程创建的所有线程?@OldProgrammer:这就是为什么。这对线程有什么影响?复制相同的堆栈框架似乎很危险在一个进程内。想象一下,{code>void*mem=malloc(50);do{thread_fork();/*由于某种原因不存在*/}而((p==0)&&(++i@PeterT:代码与线程无关。我只是想知道是否有一种方法可以像代码处理
fork()那样创建线程层次结构
。也许我不应该发布代码,以免造成混乱。代码中有fork()循环,因此父进程将生成n个子进程。进程1(主进程的子进程)将生成n-1个进程等。最好的方法是删除循环,因此每个进程只生成一个线程,带有一个计数器init to 0,递增并传递给下一个子进程,以及“n”。当传递的计数器达到“n”限制时,进程生成将停止。是的。您读过pthreads文档吗/示例?为什么您需要线程的层次结构而不是从主线程创建的所有线程?@OldProgrammer:这就是为什么。这对线程有什么作用?在一个进程中复制相同的堆栈帧似乎很危险。想象一下
void*mem=malloc(50);do{thread_fork();/*不存在是有原因的*/}而(p==0)和(++i@PeterT:代码与线程无关。我只是想知道是否有一种方法可以像代码使用
fork()
那样创建线程层次结构。也许我不应该发布代码,以免造成混淆。代码有fork()在循环中,父进程将生成n个子进程。进程1(主进程的子进程)将生成n-1个进程等。最好的方法是删除循环,因此每个进程只生成一个线程,带有一个计数器,init到0,递增并传递给下一个子进程,以及“n”。当传递的计数器达到“n”限制时,进程生成将停止。是的,我理解我尝试执行的操作的结果这不是一种常见的做法,但这是一项学校作业。例程是指我在创建线程时作为参数传递的函数?因此,如果我理解得很好,在这个例程中,我调用
pthread_create()
不要忘记加入。然后创建的线程调用同一个例程,依此类推?是的;但是起始参数通常应该是堆分配的。是的,我理解我试图做的事情的结果,这不是一种常见的做法,但这是一个学校作业。所谓例程,你指的是一个函数,当cr时我会将其作为参数传递吃线程?如果我理解得很好,在这个例程中,我调用
pthread\u create()
,而不会忘记加入。然后创建的线程调用同一个例程,依此类推?是的;但是起始参数通常应该是堆分配的。