在Linux系统里,使用pid_t pid1; pid_t pid2; pid1=fork(); pid2=fork();if(pid1==0&&pid2==0) { p(semid_SP); v(semid_SG1); }以及pv操作实现盘子水果问题并把代码写出来
时间: 2024-05-19 18:17:38 浏览: 107
pid控制的程序例子
&& pid2>0)的情况下,pid1和pid2的取值分别是什么?
如果pid1=fork()执行成功,则会返回两个值:在父进程中返回子进程的 PID,在子进程中返回 0。因此,pid1 的取值会是在父进程中的子进程的 PID,或者在子进程中的 0。
接下来,如果pid2=fork()执行成功,则会再次返回两个值:在父进程中返回子进程的 PID,在子进程中返回 0。此时,pid2 的取值会根据进程的当前状态而有所不同,对于不同情况可能会有不同的取值。
在此给出 pid1=fork() 和 pid2=fork() 的执行流程图(其中「P」表示父进程,「C1」和「C2」表示两个子进程):
情况一:pid1 在父进程中,pid2 在子进程1中
在这种情况下,pid1 的取值是子进程1的 PID,pid2 的取值是 0。这是因为 fork() 函数是在父进程中调用的,所以会返回子进程1的 PID。
情况二:pid1 在子进程1中,pid2 在子进程2中
在这种情况下,pid1 的取值是 0,pid2 的取值是子进程2的 PID。这是因为 fork() 函数在子进程1中被调用了一次,所以返回的值是 0,而在子进程2中被调用了第二次,所以返回子进程2的 PID。
情况三:pid1 和 pid2 均在子进程1中
在这种情况下,pid1 和 pid2 的取值均为 0。这是因为 fork() 函数在子进程1中被调用了两次,每次返回的值都是 0。
阅读全文