[国嵌攻略][084][信号同步编程]
2016-02-28 19:30
337 查看
进程同步
一组并发进程进行相互合作、相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步。
进程同步与进程互斥
进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的初值设置为0。但是进程互斥问题中双方都需要获取和释放信号量,所以信号量的初值至少为1。
producor.c
customer.c
一组并发进程进行相互合作、相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步。
进程同步与进程互斥
进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的初值设置为0。但是进程互斥问题中双方都需要获取和释放信号量,所以信号量的初值至少为1。
producor.c
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h> void main(){ //创建文件 int fd; fd = open("product.txt", O_RDWR | O_CREAT, 0777); //睡眠等待 sleep(10); //写入数据 write(fd, "The product is finished!", 25); //关闭文件 close(fd); //创建信号量 int key; int semid; key = ftok("product.txt", 0); semid = semget(key, 1, IPC_CREAT); //设置信号量 semctl(semid, 0, SETVAL, 0); //设置信号量0的值为0 //释放信号量 struct sembuf sops; sops.sem_num = 0; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; semop(semid, &sops, 1); }
customer.c
#include <stdlib.h> #include <sys/ipc.h> #include <sys/sem.h> void main(){ //打开信号量 int key; int semid; key = ftok("product.txt", 0); semid = semget(key, 1, IPC_CREAT); //获取信号量 struct sembuf sops; sops.sem_num = 0; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; semop(semid, &sops, 1); //拷贝文件 system("cp product.txt ship.txt"); }
相关文章推荐
- 判断文件夹,是否存在,不存在则创建Qt
- 判断文件夹,是否存在,不存在则创建Qt
- 【三层学习】——VB.NET实现登录
- java程序实现打印完美对齐的杨辉三角形
- Java 反射机制浅析
- Matlab melband的计算
- NSString+GetPath 类别
- python从注册表中获取win7屏保相关信息和已安装程序
- Java中的Collection和Map(二)--List体系
- Java中的Collection和Map(一)
- 九度-题目1096:日期差值
- USACO1.3:milk
- USACO1.2:milk2
- USACO1.5:sprime
- Java处理图片缩放,水印的利器 thumbnailator
- 创建github项目clone到本地并上传到github上简单步骤
- R语言编程艺术(11、14、15)
- USACO1.3:skidesign
- myeclipse项目如何导入到eclipse中?
- USACO1.1:gift1