C语言多进程编程示例:使用锁控制进程输出
#include <stdio.h> #include <unistd.h>
int main() { int p1, p2, i; while ((p1 = fork()) == -1); /创建子进程p1/ if (p1 == 0) { lockf(1, 1, 0); /加锁,这里第一个参数为stdout(标准输出设备的描述符)/ for (i = 0; i < 10; i++) printf('daughter %d\n', i); lockf(1, 0, 0); /解锁/ } else { while ((p2 = fork()) == -1); /创建子进程p2/ if (p2 == 0) { lockf(1, 1, 0); /加锁/ for (i = 0; i < 10; i++) printf('son %d\n', i); lockf(1, 0, 0); /解锁/ } else { lockf(1, 1, 0); /加锁/ for (i = 0; i < 10; i++) printf('parent %d\n', i); lockf(1, 0, 0); /解锁/ } } return 0; }
这是一个使用fork()创建三个进程(父进程和两个子进程)并且使用锁(lockf()函数)控制输出的例子。
在主函数中,首先创建子进程p1,如果创建失败则一直循环等待。如果创建成功,则在子进程p1中使用lockf()函数对stdout进行加锁,然后使用循环输出10次'daughter i',最后解锁stdout。
在父进程中,再次创建子进程p2,如果创建失败则一直循环等待。如果创建成功,则在子进程p2中使用lockf()函数对stdout进行加锁,然后使用循环输出10次'son i',最后解锁stdout。
在父进程中,使用lockf()函数对stdout进行加锁,然后使用循环输出10次'parent i',最后解锁stdout。
使用锁的目的是为了避免多个进程同时输出到stdout时出现混乱的情况。加锁后,只有一个进程能够访问stdout,其他进程必须等待解锁后才能访问。
原文地址: https://www.cveoy.top/t/topic/jkKu 著作权归作者所有。请勿转载和采集!