信号量互斥,王明学learn
信号量互斥
信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。
一、信号量分类
二值信号灯:信号灯的值只能取0或1
计数信号灯:信号灯的值可以取任意非负值。
二、函数学习
2.1创建/打开信号量
2.1.1 函数名
semget
2.1.2 函数原形
int semget(key_t key,int nsems,int semflg);
2.1.3 函数功能
获取信号量集合标示符
当key所指定的信号量不存在的时候,并且semflg里面包含了IPC_CREAT,这个时候就会创建一个信号量集合
2.1.4 所属头文件
<sys/types.h> <sys/ipc.h> <sys/sem.h>
2.1.5 返回值
成功:返回信号量集合的表示符
失败:-1
2.1.6 参数说明
key:键值
nsems:创建的这个信号量集合里面包含的信号量数目
semflg:标志,可以取IPC_CREAT
2.2指定键值
系统建立IPC通讯(进程间通信)必须指定一个ID值 。
1.任意指定一个数
缺点:这个数已经被别的IPC对象(消息队列,共享内存)所使用了,在与新创建的信号量关联时就会失败。
2. 构造一个尽量不会被别的IPC对象用到的数
方法:使用key_t ftok( char * fname, int id )
2.2.1 函数名
ftok
2.2.2 函数原形
key_t ftok( char * fname, int id )
2.2.3 函数功能
构造一个尽量不会被别的IPC对象用到的数
2.2.4 所属头文件
<sys/types.h><sys/ipc.h>
2.2.5 返回值
键值
2.2.6 参数说明
fname就是指定的文件名(已经存在的文件名)
id是子序号。虽然是int类型,但是只使用8bits(1-255)。
2.3操作信号量
2.3.1 函数名
semop
2.32 函数原形
int semop(int semid,struct sembuf *sops,unsigned nsops);
2.3.3 函数功能
操作信号量集合里面的信号量
2.3.4 所属头文件
<sys/types.h><sys/ipc.h><sys/sem.h>
2.3.5 返回值
成功:0
失败:-1
2.3.6 参数说明
int semid:要操作的信号量集合的标示符
struct sembuf *sops:要操作多个信号量
unsigned nsops:对信号量执行什么样的操作
信号量互斥,王明学learn的更多相关文章
- 信号量进程同步,王明学learn
信号量进程同步 一组并发进程进行互相合作.互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 信号量在进程同步时初始值为:0 信号量在进程互斥时初始值为:大于0的 本章节主要使用信号量,使的 ...
- linux内核的组成,王明学learn
linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...
- linux设备驱动概述,王明学learn
linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...
- 管道通信,王明学learn
管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...
- 进程控制理论,王明学learn
进程控制理论 一.进程 进程是一个具有一定独立功能程序的一次运行活动. 1.1进程特点 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 2.并发性:任何进程都可以同其他进程一起 ...
- 消息队列通信,王明学learn
消息队列通信 消息队列就是一个消息(一个结构)的链表.而一条消息则可看作一个记录,具有特定的格式.进程可以从中按照一定的规则添加新消息:另一些进程则可以从消息队列中读走消息. 每一个消息都是一个结构体 ...
- 共享内存同行,王明学learn
共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...
- 信号通讯编程,王明学learn
信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...
- 多进程程序设计,王明学learn
多进程程序设计 一.函数学习 1.1 创建进程fork 1.1.1 函数原形 pid_t fork(void); 1.1.2 函数功能 创建一个子进程 1.1.3 所属头文件 <unistd.h ...
随机推荐
- block,inline和inline-block对比
总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...
- 【leetcode】Valid Number
Valid Number Validate if a given string is numeric. Some examples:"0" => true" 0.1 ...
- 一步步搭建docker私有仓库并从私有仓库中下载镜像
一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p : -v ...
- find参数exec、管道符|、xargs的区别
1.这三个命令都可以将前面的输出做为后面的输入. 2.他们对于前面的输出,处理方式不同. find . -name "*.sh" -exec cat {} \; find . -n ...
- Qt 文件处理
1.删除目录下所有的文件 void deleteAllFiles(const QString& fileDir) { QDir dir(fileDir); if(!dir.exists()) ...
- HDU 4945 2048(dp)
题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 ...
- Velocity 基本语法
Velocity 基本语法 Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上.Velocity 是 Apache 基金会的项目,开发的目 ...
- #ifndef -摘自百度百科
#ifndef 标识1 //判断"标识1"是否定义,如果被定义则返回假,如果没有被定义则返回真. /**********************************/ 语句1 ...
- js 如何在浏览器中获取当前位置的经纬度
这个有一定的误差哈,具体的误差是多少,有兴趣的朋友可以去测试下 直接上代码 index.html页面代码: <html> <head lang="en"> ...
- solrconfig.xml和schema.xml说明
1. solrconfig.xml solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 1.1. datadir节点 ...