免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3836 | 回复: 20
打印 上一主题 下一主题

多线程程序fork之后,马上exec,会有问题么?有其他方法执行其他程序么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-29 11:56 |只看该作者 |倒序浏览
比较常见的写法是

if(fork() == 0){
  execl(...);
}

比如我一个进程
里面有

thread_a
thread_b
thread_c

这个时候 thread_b 执行上面的代码
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了,怎么办呢?

那不是乱套了?

还是这种情况不会发生,有人说这种情况不会发生,不过我觉得不是,应该是会发生的,又没什么保护措施


其实我是想调用另外一个 可执行程序,只是不想用system,因为system要等待process结束,我不想等待结束了。。

论坛徽章:
0
2 [报告]
发表于 2008-12-29 12:00 |只看该作者
system也是fork exec的
线程切换了为什么会乱套呢?

论坛徽章:
0
3 [报告]
发表于 2008-12-29 12:40 |只看该作者
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了

比如都切换到thead_a
肯定就会发生一些意向不到的情况啊,2个进程都在做同样的事,本意是一个进程做的

论坛徽章:
0
4 [报告]
发表于 2008-12-29 12:52 |只看该作者
原帖由 codecopier 于 2008-12-29 12:40 发表
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了

比如都切换到thead_a
肯定就会发生一些意向不到的情况啊,2个进程都在做同样的事,本意是一个进程做的

为什么会两个进程做同样的事情呢?切换回来不还是继续execl的么

论坛徽章:
0
5 [报告]
发表于 2008-12-29 13:03 |只看该作者
原帖由 codecopier 于 2008-12-29 12:40 发表
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了

比如都切换到thead_a
肯定就会发生一些意向不到的情况啊,2个进程都在做同样的事,本意是一个进程做的

很多进程都在做同样的事。。。

论坛徽章:
0
6 [报告]
发表于 2008-12-29 13:07 |只看该作者
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了

都同时切换到 thread_a

这个时候,不就有2个thread_a么,不就在做同样的事么

论坛徽章:
0
7 [报告]
发表于 2008-12-29 13:13 |只看该作者
原帖由 codecopier 于 2008-12-29 13:07 发表
如果刚好执行完fork()还没来及的执行execl,这个时候,thread就切换了

都同时切换到 thread_a

这个时候,不就有2个thread_a么,不就在做同样的事么

为什么会有两个thread_a?

论坛徽章:
0
8 [报告]
发表于 2008-12-29 13:17 |只看该作者
fork之前的进程一个thread_a

fork之后的进程一个thread_a 啊,不就是2个?

论坛徽章:
0
9 [报告]
发表于 2008-12-29 13:20 |只看该作者
原帖由 codecopier 于 2008-12-29 13:17 发表
fork之前的进程一个thread_a

fork之后的进程一个thread_a 啊,不就是2个?

fork之前的thread_a和fork之后的thread_a是同一个啊?

论坛徽章:
0
10 [报告]
发表于 2008-12-29 13:23 |只看该作者
原帖由 5毛党党员 于 2008-12-29 13:20 发表

fork之前的thread_a和fork之后的thread_a是同一个啊?



啊???这样啊,都是2个进程空间的2个线程,怎么会是同一个呢?看来和win32下大大的不同啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP