System V 信号量
1 概述
计数信号量集semid_ds:
struct semid_ds
{
struct ipc_perm sem_perm;
struct sem *sem_base; //指向信号量结构数组
unsigned short sem_nsems; //信号量集中信号量数目
time_t sem_otime; //last semop时间
time_t sem_ctime;
};
sem结构是内核用于维护某个给定信号量的内部数据结构:
struct sem
{
unsigned short semval; //信号量值
pid_t sempid;
unsigned short semncnt; //等待信号量值增长到某个值的进程数
unsigned short semzcnt; //等待信号量值为0的进程数
};
2 semget函数
#include <sys/sem.h>
int semget(key_t key,int nsems,int oflag)
key为IPC_PRIVATE或未与某个IPC对象相关联其oflag中指定IPC_CREAT,则创建信号量集
信号量集中信号量值并不进行初始化,需要通过SETVAL或SETALL命令调用semctl函数进行初始化
3 semop函数
semop函数对信号量集进行操作,增加或减小信号量值,对应释放与分配资源
int semop(int semid,struct sembuf *opsptr,size_t nops)
sembuf是针对信号集中的某个信号进行指定操作的结构,semop函数在信号集semid上进行nops个信号操作
struct sembuf
{
short sem_num;
short sem_op;
short sem_flg;
};
sem_num:指定信号集中进行操作的信号
sem_op:大于0:进程释放sem_num信号量关联的资源,释放资源数为sem_op,将sem_op加到信号值中,同时从信号量调整值中减去sem_op
小于0:进程希望获取sem_num信号量关联的资源,占用数为|sem_op|,根据semval的值和sem_flg决定阻塞还是返回
等于0:进程希望等待信号量值变成0
sem_flg:IPC_NOWAIT:非阻塞
IPC_UNDO:是否开启信号量调整(占用资源的进程因临时终止没能调整信号量值的情况是存在的,为了避免,在分配或释放资源时,用信号量调整值记录进程占用的资源)
4 semctl函数
int semctl(int semid,int semnum,int cmd,/* union semun arg */)
semctl函数中cmt命令分为三种:针对信号量集本身,针对某个信号量,针对所有信号量
因此定义共用体semun,针对不同的cmd,对semun有不同的使用:
union semun
{
int val; //SETVAL
struct semid_ds *buf; //IPC_STAT,IPC_SET
unsigned short *array; //SETALL,GETALL
};
针对信号量集:
IPC_STAT:取信号量集信息存于semun.buf中
IPC_SET:根据semun.buf设置信号量集的sem_perm.uid,sem_perm.gid
IPC_RMID:删除信号量集
针对特定信号量semnum:
GETVAL:返回信号量semval
SETVAL:根据semun.val设置信号量值
GETPID:返回信号量的sempid
GETNCNT:返回信号量的semncnt
GETZCNT:返回信号量的semzcnt
针对所有信号量:
GETALL:写所有信号量值到semun.array
SETALL:根据semun.array各元素值设置所有信号量值
System V 信号量的更多相关文章
- 第11章 System V 信号量
11.1 概述 信号量按功能分:二值信号量.计数信号量.信号量集:其中二值信号量和计数信号量指的是Posix信号量,信号量集指的是System V信号量.
- System V信号量
信号量对比 二值信号量:其值要么0要么1,比如互斥锁就是这种类型 计数信号量:其值为0或某个正整数,比如POSIX 信号量 计数信号量:一个或多个信号量构成一个集合,每个都是计数信号量,比如Syste ...
- UNIX环境高级编程——system V信号量
1. 信号量(semaphore)主要用于保护临界资源.进程可以根据它判断是否能访问某些共享资源.信号量除了用于访问控制外,还可用于进程同步,也就是进程间通信.2. 信号量分类:a. 二值信号量: 信 ...
- Linux IPC实践(11) --System V信号量(1)
信号量API #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget ...
- System V 信号量使用相关函数
System V 信号量 在提到Posix 信号量时,指的是二值信号量或计数信号量,而System V信号量指的是入了计数信号量集 二值信号量:其值为0或1,类似于互斥锁,资源被锁住时为0,资源可用为 ...
- linux网络编程之system v信号量(二)
今天迎来元旦假期的最后一天了,过得好快~昨天跟小伙伴们在军都滑雪陪儿爽,虽说上了两回中级道都摔得异常的惨烈,但是在初级道上学习"s"转弯还是有一些小心得,可以在要往高手迈进的前提, ...
- linux网络编程之system v信号量(一)
今天起,学习信号量相关的知识,下面开始: 关于信号量,在前面已经介绍过了,这里回顾一下: 通过上面的描述,很容易就能想到信号量的一上数据结构: 下面再来回顾一下P.V原语: 所谓的原语就是指这段代码是 ...
- Linux中的System V信号量
在进程同步,并发运行时,保证按序地访问共享资源是十分重要的.因此引入了临界区的概念,一次只能有一个线程进入临界区完成他的指令.而信号量(semaphore)的作用,类似于一个交通信号灯,它负责进程协作 ...
- system V信号量和Posix信号量
一.函数上的区别 信号量有两种实现:传统的System V信号量和新的POSIX信号量.它们所提供的函数很容易被区分:对于所有System V信号量函数,在它们的名字里面没有下划线.例如,应该是sem ...
- Linux IPC System V 信号量
模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> ftok() //获取key ...
随机推荐
- POJ3356 – AGTC(区间DP&&编辑距离)
题目大意 给定字符串X和Y,可以对字符串进行一下三种操作: 1.删除一个字符 2.插入一个字符 3.替换一个字符 每个操作代价是1,问运用以上三种操作把X变为Y所需的最小步数是多少? 题解 定义dp[ ...
- Linux内存寻址之分页机制
在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...
- <Android>从窗口泄漏谈android:configChanges属性
今天有幸去哥们的大公司做了半天的暂时工,一个偶现的Bug折腾了他好久,好不easy今天抓到了异常Log日志.大致的意思就是android.view.windowleaked--窗口泄漏.我在网上查了资 ...
- Solr学习笔记-在Tomcat上部署执行Solr
上一篇我们初识了Solr而且学习了Jetty的启动方式.查看了Solr的管理界面,这一篇我们来实如今Tomcat上部署执行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4. ...
- CCLabelAtlas创建自定义字体
有时候游戏中要用到一些特殊的字体效果,特别是数字. CCLabelAtlas就可以从png图中读取文字. CCLabelAtlas* diceCount=CCLabelAtlas::labelWith ...
- bash shell for循环1到100 .
前言 用bash shell写程序时,经常会用到for循环,特别是从1到100这种需求,这里记录几种shell中从1到100的循环方法 方法 类c语言 for ((i=1; i<=100; ...
- UISenior之数据的本地化持久化
数据的本地化主要分为两个方面:1.简单数据的本地持久化(NSString.NSArray.NSDictionary.NSData)2.复杂数据的本地持久化(本文以Person类为例) 简单对象的本地化 ...
- kickstart安装
1.生成ks.cfg 文件 安装Kickstart # yum install system-config-kickstart 8.2 在桌面环境下配置Kickstart 启动X Windows 环境 ...
- FxCop
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279 FxCop是一个代码分析工具,和StyleCop(代码规范)一起配合 ...
- Fetch的使用
import React,{ Component } from 'react'; import { AppRegistry, ListView, Image, Text, StyleSheet, Vi ...