父子进程共享的东西

时间:2014-10-28 15:17:00   收藏:0   阅读:502

自父进程继承

子进程所独有

 

随想杂谈

  子进程通过继承整个地址空间的副本,从而父进程哪里继承了所有互斥量,读写锁和条件状态。如果父进程包含多个线程,子进程在 fork 返回以后,如果紧接着不是马上调用 exec 的话,就需要清理锁状态。 在子进程内部只存在一个线程,它是由父进程调用 fork 返回以后,如果父进程中的线程占有锁,子进程同样占有这些锁,问题就出在子进程同样占有这些锁——但子进程不包含这些占有锁的线程副本,所以子进程没有办法知道它占有的那些锁并且需要释放哪些锁。如果子进程从 fork 返回以后马上调用某个 exec 函数,就可以避免这样的问题。这种情况下,老的地址空间被丢弃,所以锁的状态无关紧要。

  当然,不用exec,也可以使用pthread_atfork,在调用fork之前,线程先获取进程中所有锁,在调用fork后分别在父子进程中释放这些锁,从而父子可以重新获取和释放这些锁资源。

 

原文:http://www.cnblogs.com/zhaoyl/p/4056771.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!