博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
信号量同步编程
阅读量:4285 次
发布时间:2019-05-27

本文共 1186 字,大约阅读时间需要 3 分钟。

进程同步:一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。如生产者与消费者问题,这是操作系统关于同步的一个经典问题。生产者生产产品,而消费者必须在生产者生产完毕后才能使用产品。

同步的关键是设置资源的信号量初始值为0,生产者执行完所有指令后释放该资源,即令其信号量变成1,使其能够被其它进程使用;消费者只获取信号量而不释放。
生产者进程A:创建信号量并设置初始值为0,然后生产,生产完毕后释放

#include
#include
#include
#include
#include
#include
void main(){ int fd=open("/home/jx/myfile",O_RDWR|O_APPEND|O_CREAT,0777); key_t key=ftok("/home/jx/myfile",1); /*创建键值*/ int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/ semctl(semid,0,SETVAL,0);/*设置信号量初始值*/ struct sembuf sop; struct sembuf *sops=&sop; write(fd,"hello ",6); sleep(10); write(fd,"world!",6); close(fd); /*释放信号量*/ sops->sem_num=0; sops->sem_op=1; sops->sem_flg=SEM_UNDO; semop(semid,sops,1);}

消费者进程B:获取信号量并使用资源

#include
#include
#include
#include
void main(){ key_t key=ftok("/home/jx/myfile",1); /*创建键值*/ int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/ /*获取信号量*/ struct sembuf sop; struct sembuf *sops=&sop; sops->sem_num=0; sops->sem_op=-1; sops->sem_flg=SEM_UNDO; semop(semid,sops,1); system("cp /home/jx/myfile /home/jx/myfile1");}

转载地址:http://amigi.baihongyu.com/

你可能感兴趣的文章
《图像处理实例》 之 车牌定位
查看>>
《opencv学习》 之 OTSU算法实现二值化
查看>>
《图像处理实例》 之 答题卡检测
查看>>
图像矩的初步探索(第十一天)
查看>>
《电路学习第一天》 之 电路设计之前的准备
查看>>
《电路学习第三天》 之 线性稳压电源的设计
查看>>
《图像处理实例》 之 目标旋转矫正(基于区域提取、DFT变换)
查看>>
不规则ROI的提取
查看>>
《图像处理实例》 之 提取特殊背景的直线
查看>>
《电路学习第三天》 之 彩扩机项目设计
查看>>
《图像处理实例》 之 物体计数
查看>>
《图像处理实例》 之 透视变换
查看>>
图像像素的获取和操作(第三天)
查看>>
图像像素的线性叠加(第四天)
查看>>
制作多张“像素、通道、大小”相同的图片
查看>>
中值、均值、高斯、双边滤波(第五天)
查看>>
PCB的初次窥探
查看>>
霍夫变换的基本理解(第八天)
查看>>
opencv查看源代码
查看>>
典型梯度下降法
查看>>