Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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
在子进程内创建线程 #包括 #包括 int值=0; void*runner(void*param); int main(int argc,char*argv[]) { int-pid; pthread_t tid; pthread_attr_t attr; pid=fork(); 如果(pid==0){ pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,NULL); pthread_join(tid,NULL); printf(“子值=%d”,值); } 否则,如果(pid>0){ 等待(空); printf(“父值=%d”,值); } } 无效*流道(无效*参数){ 数值=5; pthread_退出(0); }_C_Multithreading_Pthreads - Fatal编程技术网

在子进程内创建线程 #包括 #包括 int值=0; void*runner(void*param); int main(int argc,char*argv[]) { int-pid; pthread_t tid; pthread_attr_t attr; pid=fork(); 如果(pid==0){ pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,NULL); pthread_join(tid,NULL); printf(“子值=%d”,值); } 否则,如果(pid>0){ 等待(空); printf(“父值=%d”,值); } } 无效*流道(无效*参数){ 数值=5; pthread_退出(0); }

在子进程内创建线程 #包括 #包括 int值=0; void*runner(void*param); int main(int argc,char*argv[]) { int-pid; pthread_t tid; pthread_attr_t attr; pid=fork(); 如果(pid==0){ pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,NULL); pthread_join(tid,NULL); printf(“子值=%d”,值); } 否则,如果(pid>0){ 等待(空); printf(“父值=%d”,值); } } 无效*流道(无效*参数){ 数值=5; pthread_退出(0); },c,multithreading,pthreads,C,Multithreading,Pthreads,孩子和父母的价值是什么?? 子线程及其创建的线程是否共享数据?那么输出将是5和0 子线程及其创建的线程是否共享数据 不可以。如果父进程的内存不足,则可以将子进程视为获取副本。因此,父项看不到子项所做的任何更改 那么输出将是5和0 是:子级打印5,父级打印0(不一定按此顺序)。发生的情况是: 子进程是通过复制父进程的内存空间创建的。它将看到与父级相同的数据,但它只是一个副本,因此它们不能相互干扰。子进程(或其任何线程!)所做的任何后续更改只对其自身可见 子进程生成的线程与子进程的主线程共享内存空

孩子和父母的价值是什么?? 子线程及其创建的线程是否共享数据?那么输出将是5和0

子线程及其创建的线程是否共享数据

不可以。如果父进程的内存不足,则可以将子进程视为获取副本。因此,父项看不到子项所做的任何更改

那么输出将是5和0

是:子级打印5,父级打印0(不一定按此顺序)。

发生的情况是:

  • 子进程是通过复制父进程的内存空间创建的。它将看到与父级相同的数据,但它只是一个副本,因此它们不能相互干扰。子进程(或其任何线程!)所做的任何后续更改只对其自身可见
  • 子进程生成的线程与子进程的主线程共享内存空间,并且再次在父进程中看到值的副本

因此,由于在子进程生成的线程中指定的值仅在子进程内可见,而在父进程内不可见,因此结果为5和0

当你尝试时会发生什么?5代表孩子,0代表父母。fork()创建了一个新进程,因此,它提供了空间隔离。很抱歉,这种问题可以通过简单地运行相关代码轻松解决。我将结束你们的两个问题,请不要第三次发帖。
#include<pthread.h>
#include<stdio.h>
int value=0;
void *runner(void *param);
int main(int argc,char *argv[])
{
int pid;
pthread_t tid;
pthread_attr_t attr;
pid=fork();
if(pid==0){
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf("CHILD VALUE=%d",value);
}
else if(pid>0){
wait(NULL);
printf("PARENT VALUE=%d",value);
}
}


void *runner(void *param){
value=5;
pthread_exit(0);
}