信号量互斥

  信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。

一、信号量分类

  二值信号灯:信号灯的值只能取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的更多相关文章

  1. 信号量进程同步,王明学learn

    信号量进程同步 一组并发进程进行互相合作.互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 信号量在进程同步时初始值为:0 信号量在进程互斥时初始值为:大于0的 本章节主要使用信号量,使的 ...

  2. linux内核的组成,王明学learn

    linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...

  3. linux设备驱动概述,王明学learn

    linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...

  4. 管道通信,王明学learn

    管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...

  5. 进程控制理论,王明学learn

    进程控制理论 一.进程 进程是一个具有一定独立功能程序的一次运行活动. 1.1进程特点 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 2.并发性:任何进程都可以同其他进程一起 ...

  6. 消息队列通信,王明学learn

    消息队列通信 消息队列就是一个消息(一个结构)的链表.而一条消息则可看作一个记录,具有特定的格式.进程可以从中按照一定的规则添加新消息:另一些进程则可以从消息队列中读走消息. 每一个消息都是一个结构体 ...

  7. 共享内存同行,王明学learn

    共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...

  8. 信号通讯编程,王明学learn

    信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...

  9. 多进程程序设计,王明学learn

    多进程程序设计 一.函数学习 1.1 创建进程fork 1.1.1 函数原形 pid_t fork(void); 1.1.2 函数功能 创建一个子进程 1.1.3 所属头文件 <unistd.h ...

随机推荐

  1. C++拷贝构造函数(深拷贝,浅拷贝)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #i ...

  2. 《oracle每日一练》oralce数据库的导入导出

    今天尝试了数据库的导出,直接在命令行里面使用了导出指令: exp uname/pwd@127.0.0.1:1521/orcl  file='xx.dmp' 出现的问题: 直接@tnsnames里面配的 ...

  3. poj 2240(floyd)

    http://poj.org/problem?id=2240 题意:有些人会利用货币的不用汇率来进行套现,比如1美元换0.5英镑,而1英镑又可以换10法郎,而1法郎又可以换0.21的美元,那么经过货币 ...

  4. POJ 3903

    http://poj.org/problem?id=3903 这个题目是一个求最长递增子序列,这个只是求长度而已,所以可以用LIS 所谓的LIS也就是用二分优化来减少时间而已,而且其只能求出最长的序列 ...

  5. iOS GCD 必读推荐,有关于单例使用问题

    链接如下:http://www.cocoachina.com/swift/20150129/11057.html 以前只注意使用dispatch_once达到创建单例对象时的线程安全,读了下边这篇文章 ...

  6. QListWidget

    1.失去焦点背景颜色,代码设置全选的时候,背景会是白色,需要设置失去焦点背景颜色.(设置焦点,会出现白转化成设置背景色,效果不好) QPalette p; p.setColor(QPalette::I ...

  7. 配置ubuntu虚拟机备忘

    #1配置minicom sudo minicom -s sudo minicom -w #1.配置网络,嵌入机的ip地址 ifconfig eth0 10.5.52.202 #2.挂载文件,把虚拟主机 ...

  8. 7.nodejs权威指南--加密与压缩

    1. 加密与压缩 1.1 加密 var crypto = require('crypto'); var text = "12345678"; var hasher = crypto ...

  9. MySQL 利用SQL线程对Binlog操作

    背景: 对于MySQL的binlog的查看都是用其自带的工具mysqlbinlog进行操作的,其实还有另一个方法来操作binlog,就是Replication中的SQL线程去操作binlog,其实bi ...

  10. Divide and conquer:Matrix(POJ 3685)

    矩阵 题目大意:矩阵里面的元素按i*i + 100000 * i + j*j - 100000 * j + i*j填充(i是行,j是列),求最小的M个数 这一题要用到两次二分,实在是二分法的经典,主要 ...