来来来,100分,fork(),线程死锁

klc2041 2012-03-11 06:24:05
小弟有以下问题不明白
#include<stdilo.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys.wait.h>

int main()
{
printf("begin");
pid_t pc,pr;
pc=fork();/***A***/
if(pc<0)
{
perror("error");
exit(1);
}
else if(pc==0)
{
prntf("child");、***** B****、
}
else{
printf("parent");
}
}

1 小弟不明白在A处 pc=fork();后假设子进程创建成功那么子进程立即进入B代码处,还是从main开始重新执行?

2 也就是子进程创建成功后是从fork以后相应位置开始执行,还是重新从main开始?创建的子进程会打印begin吗(我理解不会),对吗?请详解!

3.请大家给我一个解决线程死锁问题解决的实例链接(如果有),也就是C语言实例体现的?你们工作中解决线程一般用那些方法(列举,有链接更好)?


请大家分点回答(1,2,3),我会根据回答情况公平给分!谢谢大家,辛苦哥子姐妹了!!!!!!!


就两个问题看问题:

#include<stdilo.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys.wait.h>

int main()
{
printf("begin");
pid_t pc,pr;
pc=fork();/***A***/
if(pc<0)
{
perror("error");
exit(1);
}
else if(pc==0)
{
prntf("child");、***** B****、
}
else{
printf("parent");
}
}

1 小弟不明白在A处 pc=fork();后假设子进程创建成功那么子进程立即进入B代码处,还是从main开始重新执行?

2 也就是子进程创建成功后是从fork以后相应位置开始执行,还是重新从main开始?创建的子进程会打印begin吗(我理解不会),对吗?请详解!

3.请大家给我一个解决线程死锁问题解决的实例链接(如果有),也就是C语言实例体现的?你们工作中解决线程一般用那些方法(列举,有链接更好)?


请大家分点回答(1,2,3),我会根据回答情况公平给分!谢谢大家,辛苦哥子姐妹了!!!!!!!


...全文
128 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙战于野1988 2012-03-12
  • 打赏
  • 举报
回复
找个虚拟机试下就知道,是从Main函数处开始执行的,楼主可以自己找个环境试下,我的是Linux系统,内核版本是2.6.16.60-0.42.10,确定是从Main开始处执行的
Wdayear 2012-03-11
  • 打赏
  • 举报
回复
1 小弟不明白在A处 pc=fork();后假设子进程创建成功那么子进程立即进入B代码处,还是从main开始重新执行?
从B代码处开始执行。父进程和子进程,他们两个接下来的代码是一模一样的,唯一的区别就是fork()的返回值不一样,子进程的返回值是0,父进程的返回值是子进程的进程id号。利用这个特性可以区分开父子进程并使他们运行不同代码。

2 也就是子进程创建成功后是从fork以后相应位置开始执行,还是重新从main开始?创建的子进程会打印begin吗(我理解不会),对吗?请详解!
从fork后开始执行。不会打印begin。详解可以看上面

3.请大家给我一个解决线程死锁问题解决的实例链接(如果有),也就是C语言实例体现的?你们工作中解决线程一般用那些方法(列举,有链接更好)?
这个没了解。
pengzhixi 2012-03-11
  • 打赏
  • 举报
回复
1.当然是进入B段了。
2.从fork后面开始执行,是否打印begin得看是否复制了缓冲区的内存。
感觉在继续 2012-03-11
  • 打赏
  • 举报
回复
大一新生伤不起啊

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧