题目:编写一段程序测试程序清单10-17中父进程和了进程的同步函数,要求进程创建一个文件并向文件写一个整数0,然后进程调用fork,接着父进程和了进程交替增加文件中的计数器値,每次计数器值增1时,打印是哪一个进程(子进程或父进程)进行了该增1操作
答案(仅供参考)
int main(void)
{
pid_t pid;
int count = 0;
TELL_WAIT();
printf("in parent process\n");
count ++;
printf("count = %d \n",count);
if((pid = fork()) < 0 ){
err_sys("fork error");
} else if (pid == 0) {
printf("in child process\n");
count++;
printf("count = %d \n",count);
TELL_PARENT(getppid());
while(1){
sleep(2);
TELL_WAIT();
WAIT_PARENT();
count = count + 2;
printf("in child process\n");
printf("count = %d \n",count);
TELL_PARENT(getppid());
}
exit(0);
}
sleep(2);
while(1){
sleep(2);
TELL_WAIT();
WAIT_CHILD();
count = count + 2;
printf("in parent process\n");
printf("count = %d \n",count);
TELL_CHILD(pid);
}
exit(0);
}
答案(仅供参考)
int main(void)
{
pid_t pid;
int count = 0;
TELL_WAIT();
printf("in parent process\n");
count ++;
printf("count = %d \n",count);
if((pid = fork()) < 0 ){
err_sys("fork error");
} else if (pid == 0) {
printf("in child process\n");
count++;
printf("count = %d \n",count);
TELL_PARENT(getppid());
while(1){
sleep(2);
TELL_WAIT();
WAIT_PARENT();
count = count + 2;
printf("in child process\n");
printf("count = %d \n",count);
TELL_PARENT(getppid());
}
exit(0);
}
sleep(2);
while(1){
sleep(2);
TELL_WAIT();
WAIT_CHILD();
count = count + 2;
printf("in parent process\n");
printf("count = %d \n",count);
TELL_CHILD(pid);
}
exit(0);
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7232789/viewspace-688239/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7232789/viewspace-688239/