得到信号量(生成信号量)
int semget(key_t key,int nsem,int semflg)
参数解析
- key:这是一个key值,可以理解为一个端口,这个用函数ftok生成,一会介绍
- nsem:信号量的个数
- semflg:创建信号量的方式,它由两个固定标识位参数可以选择。如果是IPC_CREAT,表示如果有一个信号量则返回,如果没有则创建。IPC_EXCL,如果单独使用它没有任何的意义,但是如果和IPC_CREAT一起使用,就是IPC_CREAT|IPC_EXCL表示如果有信号量则出错返回,如果没有则创建,这样就可以保证我们每次使用的时候创建的是一个全新的信号量
返回值
如果失败返回-1,如果成功返回信号量标识符(信号量ID)
删除信号量
int semctl(int semid,int semnum,int cmd,...)
参数:
- semid:这个是删除的信号量的标识符(ID)
- semnum:这个是删除的信号量的个数,这里暂时设置0
- cmd:执行命令的方式,这里我们主要是为了删除一个信号量,可以直接使用IPC_RMID
初始化信号量
int semctl(int semid,int semnum,int cmd,...)
union semnu{int val; // 使用的值struct semid_ds *buf; // IPC_STAT、IPC_SET 使用缓存区unsigned short *array; // GETALL,、SETALL 使用的数组struct seminfo *__buf; // IPC_INFO(Linux特有) 使用缓存区
};
我们在使用semctl进行 信号量初始化的时候,首先得先用上面的联合体定义一个对象,然后这个联合体是需要我们自己定义的,然后把实例化的这个对象的val设置为1(这里我们使用的是二元信号量)
函数使用示例:
union semnu _semnu;
semctl(semid,semnum,SETVAL,_semnu);
返回值:失败返回-1
信号量Pv操作
int semop(int semid,struct sembuf* sops,unsigned nsops)
参数
- semid:信号量标识符
- sops:这个也是需要我们提前实例化一个对象,这里我们可以传递的是一个结构体数组,也可以是一个结构体的地址
- nspos:是结构体的个数,因为上一个参数是一个数组
这里第二个参数也是一个结构体,这个结构体是系统自定义的结构体,不需要我们定义,我们可以直接调用它,这里结构体的内容 如下
struct sembuf{unsigned short sem_num;short sem_op;short sem_flag;
};
num:标记信号量集中的第几个
sem_op:标记是那种操作,比如二元信号量p设置为-1,如果是v操作设置为1
sem_flag:我们此时默认设置为0
讨论信号量的几种情况
补充两个linux的指令:
- ipcs -s :查看当前信号量
- ipcrm -s 信号量标识符:删除某一个信号量
- ipcs -q:查看当前消息队列数
- ipcrm -q 消息队列标识符:删除某一个消息队列
空闲态:这时候手机只能使用一路信号,应该是最强的那一路。手机在空闲态时不断地搜索各个导频的强度,如果搜到比当前使用的导频更强的,那么它就自发的进行切换。这个切换的过程是手机自发的过程,不需要基站的参与。业务态:手机最多可以使用3路导频信号,并且将这3路导频信号进行最大比合并,也就是说将3个信号合并成更强的信号。如果手机测量到有更强的导...
文章目录概念描述通信原理编程接口使用流程编程案例 概念描述 英文:semaphore 简称SEM,主要用来进行进程间同步本质:内核维护的一个正整数,可对其进行各种+/-操作分类:systemV 信号量、POSIX 有名信号量、POSIX 无名信号量用途:用来标示系统中可用资源的的个数,协调各个进程有序的访问资源,防止发生冲突...
osi七层协议 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 每层运行常见的物理设备 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就理解了整个互联网通信的原理。 首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所...
原文出处: 韩昊 1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章...
原文出处: 韩昊 我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维...
很多Linux高手都喜欢使用screen命令,screen命令可以使你轻松地使用一个终端控制其他终端。尽管screen本身是一个非常有用的工具,byobu作为screen的增强版本,比screen更加好用而且美观,并且提供有用的信息和快捷的热键。 想象一下这样一个场景:你通过Secure Shell(ssh)链接到一个服务器,并...
NarrowbandPrimary Synchronization Signal时域位置每1个SFN存在一个NPSSSFNSubframeSymbol长度每个SFN5最后11个symbol11个symbols频域位置NB-IOT下行带宽固定180kHz,一个PRB,12个子载波。...
[h1]反斜杠只能够阻止一个字符 [h2]位于键盘的左上角,和~公用一个键。...
英语的重要性,毋庸置疑!尤其对广大职场人士,掌握英语意味着就多了一项竞争的技能。那,对于我们成人来说,时间是最宝贵的。如何短时间内在英语方面有所突破,这是我们最关心的事情。英语学习,到底有没有捷径可以走,是否可以速成?周老师在这里明确告诉大家,英语学习,没有绝对的捷径走,但是可以少走弯路。十多年的教学经验告诉我们,成功的学习方法可以借...
展开全部 其实IDLE提供了一个显32313133353236313431303231363533e78988e69d8331333365663438示所有行和所有字符的功能。 我们打开IDLE shell或者IDLE编辑器,可以看到左下角有个Ln和Col,事实上,Ln是当前光标所在行,Col是当前光标所在列。 我们如果想得到文件代码...
前言[1]从 Main 方法说起[2]走进 Tomcat 内部[3]总结[4]《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spri...
【本文摘要】【注】本文所述内容为学习Yjango《学习观》相关视频之后的总结,观点归Yjango所有,本文仅作为学习之用。阅读本节,会让你对英语这类运动类知识的学习豁然开朗,你会知道英语学习方面,我们的症结所在。学习英语这类运动类知识,需要把握四个原则第一,不要用主动意识。第二,关注于端对端第三,输入输出符合实际情况第四,通过多个例子...
点云PCL免费知识星球,点云论文速读。文章:RGB-D SLAM with Structural Regularities作者:Yanyan Li , Raza Yunus , Nikolas Brasch , Nassir Navab and Federico Tombari编译:点云PCL代码:https://github.co...