一切多进程都从一道有趣的题开始:(fork() && fork()) || ( fork() && fork())

曾经见到这么一道题:

 

1 int main() {
2 
3     if ( (fork() && fork())  || ( fork() && fork()) )
4         ;
5     cout << getpid() << endl;
6 }

 

可以分解为以下三个问题:

  1. 多进程 fork()  的双重返回值

  2. (  条件a  &&  条件b )  的执行问题   

  3. (  条件c  ||  条件d )  的执行问题

 

问题一: fork() 返回值是什么

ans     :    父进程  return 0

     子进程  return pid

 

问题二: a && b 复合条件如何执行?

ans  :     先执行a ,若a 为True  或  !0  则执行b

      否则不执行b,直接结束

 

问题三: c || d   复合条件如何执行?

ans   :   先执行c ,若 c 为 False 或 0 则执行d

     否则不执行d,直接结束

 

所以一共7个线程产生

如下图所示:

 

 

 

 

 

 

 

 

 

 

        

 

posted @ 2020-03-16 21:49  NingK  阅读(491)  评论(0)    收藏  举报