进程通信之信号量笔记

                   信号量通信模块

信号量作用:主要的作用就是保护临街资源,也就是说,如果来年各

个进程都需要用到某个资源,那么通过信号量,让进程A和进程B分别占有
一定的信号量,每次信号量只能准许一个进程访问,信号量是有时间
限制的,这样就可以使两个进程都有机会访问同一个资源。

分类:
二值信号量 :信号灯的只能取0和1,类似互斥概念。当资源为可用的
时候,信号灯可以自己对资源信号灯进行修改,变为可用。二互斥锁概

念强调的是进程,进程占用完资源后,必须由该进程来解锁,

计数信号灯:信号灯的值可以取任意非负值。这种情况,就像我在工厂打工,
每次下班都在刷卡,第一次刷卡不成功,就不能在刷了,排在后面先让其他人

在刷,等其他人刷好了,你在刷,因为每个人刷卡的时间都是有限的,可以这

样理解,这样就避免了死锁灯问题。

创建 打开

int   semget(key_t key, int nsems,int semflg)

key : 键值,上一篇博客有提到,第一步要做的事。
    nsems:  打开或者穿件信号灯集合数目;
    semflg:标识,和消息队列差不多;

操作
int semop(int semid, struct sembuf*sops, unsigned nsops)

参数:
semid:信号量集合的ip
sops;  操作数,表明要操作的内容
nsops: sops所指向的数组的元素个数;要多少个操作

struct sembuf{
   unsigned short sem_num;      //获取信号量的第几个,数组下表
   short sem_op;  //获取还是,释放信号量,1为释放,-1获取
   short sem_flg;              // 标志,IPC_NOWAIT,当操作数不满足是,立即返回错误
            
    IPC_UNDO程序无论正常还是不正常都释放信号量,避免死锁。

}

时间: 2024-11-25 10:31:39

进程通信之信号量笔记的相关文章

linux 进程通信之 信号量

信号量又名信号灯,与其他进程间通信方式大不相同,主要用途是用来保护临界资源.进程可以根据它判断是否能访问某些共享资源.除了用于访问控制外,还可以用于进程同步. 分类: 二值信号灯:信号灯的值只能取0或1,类似与互斥锁.但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值:互斥锁更强调进程,占用资源的进程使用完资源后,必须有进程本身来解锁.(我们常说的PV操作) 计数信号灯:信号灯的值可以取任意非负数.(多用于生产者消费者模型) 不管哪种信号灯,当信号灯的值为0时,会

进程通信(信号量)

信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的 通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识.信号 量在此过程中负责数据操作的互斥.同步等功能. 当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用.大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用. 当进程不再使用一个信号量控制的共享资源时,信号量的值+1,对信号量的值进行的增减 操作均为原子操作,这是由于信号量主要的作用是维护资源的互斥

进程通信之信号量的操作

信号量的概述:信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进程的两个原子操作(PV操作).其中信号量对应于某一个资源,取一个非负的整形值.信号量值指的是当前可用的该资源的数量,若它等于0则意味着目前没有可用资源. PV原子操作的具体定义为: P操作:如果有可用的资源(信号量值>0),则占用一个资源(给信号量值减一,进入临界区代码),如果没有可用的资源(信号量值等于0),则被阻塞到,知道系统将资源分配给该

Linux程序设计学习笔记----System V进程通信(共享内存)

转载请注明出处:http://blog.csdn.net/suool/article/details/38515863 共享内存可以被描述成内存一个区域(段)的映射,这个区域可以被更多的进程所共享.这是IPC机制中最快的一种形式,因为它不需要中间环节,而是把信息直接从一个内存段映射到调用进程的地址空间. 一个段可以直接由一个进程创建,随后,可以有任意多的进程对其读和写.但是,一旦内存被共享之后,对共享内存的访问同步需要由其他 IPC 机制,例如信号量来实现.象所有的System V IPC 对象

进程通信(二)—— 信号量&内存共享

内存共享是进程间常用的通信方式,可以实现两个完全独立的进程通信. 在访问共享内存时,同时需要信号量进行访问控制. 使用ipcs -m命令可以查看系统共享内存,ipce -m + key 可以删除指定的共享内存. 对共享内存操作时,使用信号量对共享内存进行保护,类似与线程中的互斥锁.都可以看做是通过PV操作实现临界资源保护. P:对信号量标记位-1,获取信号量,如果标记位为0,表示有其他进程占用资源,无法获取. V:对信号量标记位+1,释放信号量,将资源释放,给其他进程使用. 信号量和内存共享需要

Linux 进程通信之 ——信号和信号量总结

如今最经常使用的进程间通信的方式有:信号,信号量,消息队列,共享内存.       所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂.机制不同,复杂度也不一样.通信是一个广义上的意义,不仅仅指传递一些massege.他们的用法是基本相同的,所以仅仅要掌握了一种的用法,然后记住其他的用法就能够了. 1. 信号       在我学习的内容中,主要接触了信号来实现同步的机制,据说信号也能够用来做其他的事      情,可是我还不知道做什么.       信号和信号量是

Linux笔记--Linux进程通信

Linux进程间通信 文章来源: http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html 一.进程间通信概述进程通信有如下一些目的:A.数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间B.共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到.C.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程).D.

linux进程通信之SYSTEM V信号量

信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有.信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒. 一.信号量的分类: 在学习信号量之前,我们必须先知道--Linux提供两种信号量: (1) 内核信号量,由内核控制路径使用. (2) 用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEM V信号量. POSIX信号量又分为有名信号量和无名信号量.有名信号量,其值保存在文件

Linux程序设计学习笔记----System V进程通信之消息队列

一个或多个进程可向消息队列写入消息,而一个或多个进程可从消息队列中读取消息,这种进程间通讯机制通常使用在客户/服务器模型中,客户向服务器发送请求消息,服务器读取消息并执行相应请求.在许多微内核结构的操作系统中,内核和各组件之间的基本通讯方式就是消息队列.例如,在 MINIX 操作系统中,内核.I/O 任务.服务器进程和用户进程之间就是通过消息队列实现通讯的. Linux中的消息可以被描述成在内核地址空间的一个内部链表,每一个消息队列由一个IPC的标识号唯一的标识.Linux 为系统中所有的消息队