linux进程间的通信--信号量同步
来源:互联网 发布:软件测试基本原则 编辑:程序博客网 时间:2024/06/05 00:06
1.核心理论
进程的同步:是指一组并发的进程互相合作互相等待,使得各进程按照一定的顺序执行的过程叫做进程同步。
同步与互斥的区别:同步时信号量初始值为0,互斥时信号量初始值大于0。
解释:如果用信号量互斥的话,必须是生产者进程先执行。如果采用信号量同步的话,那么那么生产者和消费者的执行顺序不影响结果
2.进程同步编程实例
消费者与生产者的关系
生产者进程:创建一个文件,向文件中写入字符,二者之间穿插一些休息
消费者进程:该进程在生产者休息期间,读取文件内容,导致中间出现一些问题。
简单来说就是必须要先生产完成,然后才能消费。生产者完成任务是才释放信号量。
producter.c
#include <stdio.h>#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; key_t key; int semid; struct sembuf sops; //创建一个键值 key = ftok("home",1); //创建一个信号量 semid = semget(key,1,IPC_CREAT); semctl(semid,0,SETVAL,0); fd = open("./pro.txt",O_RDWR|O_CREAT|O_APPEND,0777); sleep(15); write(fd,"welcome,linux!",14); //释放信号量 sops.sem_num = 0; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; semop(semid,&sops,1); close(fd);}
- consumer.c
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>void main(){ key_t key; int semid; int ret; struct sembuf sops; key = ftok("home",1);//创建一个键值 semid = semget(key,1,IPC_CREAT);//获取信号量 //IPC_CREAT命令如果键值不存在就创建 /*法一:通过轮寻查看信号量是否释放 ret = semctl(semid,0,GETVAL); printf("%d\n",ret); while(!(ret)) ret = semctl(semid,0,GETVAL); */ //法二:采用信号量机制 sops.sem_num = 0;//要操作的信号量序号 sops.sem_op = -1;//设置为自减1 sops.sem_flg = SEM_UNDO;//要操作的信号量序号 semop(semid,&sops,1);//执行操作 system("cp ./pro.txt ./temp");}
0 0
- linux进程间的通信--信号量同步
- linux进程间的通信(C): 信号量
- linux进程间的通信: 信号量
- Linux的进程间通信-信号量
- Linux进程间的通信--信号量
- Linux进程间的通信--信号量
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- linux进程间通信--信号量
- Linux 进程间通信--- 信号量
- linux进程间通信--信号量
- Linux进程间通信信号量
- Linux进程间通信-信号量
- Linux进程间通信-信号量
- linux 进程间通信 信号量
- 【Linux进程间通信】 - 信号量
- Linux进程间通信--信号量
- jobserver和日志聚集aggregation
- 数据结构(Java)——迭代器Iterator
- android 状态栏和导航栏(status and navigation bars)
- django 1.8 出现 TemplateDoesNotExist 错误
- poj3660
- linux进程间的通信--信号量同步
- sqlite第三方类库:FMDB使用
- equals getClass
- java程序员第十四课 -JSP技术、JavaBean知识和EL表达式(重点)-JSP的开发模式,注册和登陆的案例
- quartz实现动态定时任务
- axure淘宝购买记录Project 2013软件+
- JS :3秒后自动跳转功能
- lvm 常用命令
- 如何将控制文件迁移到ASM