社区
Linux/Unix社区
帖子详情
进程间通信 信号量
superbtl
2010-04-19 11:21:49
很多软件会创建信号量,如果软件被人为或者异常终止了,那么信号量的资源没有释放,ipcs -a可以查询到,怎么清理这些垃圾,不要用shell人为做,这个我已经写了,
我想用程序每次启动的时候判断,因为都是在当前目录下 ftok("./", 'a')创建键值,我现在是如果'a'创建不成功就 'a'+1创建,可是如果垃圾太多,最后会创建不成功,有什么好的方法在程序启动的时候把这里垃圾删除掉,而且不会删除正常的信号量
...全文
253
12
打赏
收藏
进程间通信 信号量
很多软件会创建信号量,如果软件被人为或者异常终止了,那么信号量的资源没有释放,ipcs -a可以查询到,怎么清理这些垃圾,不要用shell人为做,这个我已经写了, 我想用程序每次启动的时候判断,因为都是在当前目录下 ftok("./", 'a')创建键值,我现在是如果'a'创建不成功就 'a'+1创建,可是如果垃圾太多,最后会创建不成功,有什么好的方法在程序启动的时候把这里垃圾删除掉,而且不会删除正常的信号量
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
superbtl
2010-04-20
打赏
举报
回复
辛苦了, 给分......
superbtl
2010-04-20
打赏
举报
回复
好像没有被使用过的信号量找它上次调用它的进程ID是零
superbtl
2010-04-20
打赏
举报
回复
[Quote=引用 6 楼 guosha 的回复:]
晕,又看了一下题,你的要求是要把信号量删除吗?
这样应该是你应该自己去反思一下自己的设计,信号量属于系统资源,并不是属于某一个进程,所以Linux提供应该是没有让哪个进程退出的时候自动把信号量删除的机制。
我想正确的做法应该是程序启动的时候试着去打开这个已知的信号量,如果此已知的信号量不存在,你再去创建这个信号量。这样就不会有问题了。
[/Quote]这个方法我也想过了,可是不解决根本的问题,我当初设想是不是可以判断上一次使用该信号量的进程ID是否与本次进程pid相同来判断也可以,现在看来是没什么好办法
wesleyluo
2010-04-20
打赏
举报
回复
学习下。
superbtl
2010-04-19
打赏
举报
回复
[Quote=引用 1 楼 hittlle 的回复:]
加上SEM_UNDO选项就行了;在程序异常终止的情况下,内核会自动帮你进行处理
[/Quote]这个释放资源应该是恢复到此进程占用的前一状态,不是消除信号量,只是为了避免死锁的
hittlle
2010-04-19
打赏
举报
回复
加上SEM_UNDO选项就行了;在程序异常终止的情况下,内核会自动帮你进行处理
xiaowai0219
2010-04-19
打赏
举报
回复
我好像看到都是这样的:创建时指定IPC—CREAT|IPC—EXCL,返回错误再判断是否存在(EEXIST),存在的话打开就行啦
rzsheng
2010-04-19
打赏
举报
回复
楼上说的很有道理呀
快乐田伯光
2010-04-19
打赏
举报
回复
晕,又看了一下题,你的要求是要把信号量删除吗?
这样应该是你应该自己去反思一下自己的设计,信号量属于系统资源,并不是属于某一个进程,所以Linux提供应该是没有让哪个进程退出的时候自动把信号量删除的机制。
我想正确的做法应该是程序启动的时候试着去打开这个已知的信号量,如果此已知的信号量不存在,你再去创建这个信号量。这样就不会有问题了。
快乐田伯光
2010-04-19
打赏
举报
回复
加了sem_opem的时候把SEM_UNDO置上,进程死了的话,此进程占用的信号量就会自动释放。
[Quote=引用 4 楼 superbtl 的回复:]
引用 3 楼 guosha 的回复:
进程死了的话,此进程占用的信号量就会自动释放。
引用 2 楼 superbtl 的回复:
引用 1 楼 hittlle 的回复:
加上SEM_UNDO选项就行了;在程序异常终止的情况下,内核会自动帮你进行处理
这个释放资源应该是恢复到此进程占用的前一状态,不是消除信号量,只是为了避免死锁的
这个回答显然是错的。。。。。。
[/Quote]
superbtl
2010-04-19
打赏
举报
回复
[Quote=引用 3 楼 guosha 的回复:]
进程死了的话,此进程占用的信号量就会自动释放。
引用 2 楼 superbtl 的回复:
引用 1 楼 hittlle 的回复:
加上SEM_UNDO选项就行了;在程序异常终止的情况下,内核会自动帮你进行处理
这个释放资源应该是恢复到此进程占用的前一状态,不是消除信号量,只是为了避免死锁的
[/Quote]这个回答显然是错的。。。。。。
快乐田伯光
2010-04-19
打赏
举报
回复
进程死了的话,此进程占用的信号量就会自动释放。
[Quote=引用 2 楼 superbtl 的回复:]
引用 1 楼 hittlle 的回复:
加上SEM_UNDO选项就行了;在程序异常终止的情况下,内核会自动帮你进行处理
这个释放资源应该是恢复到此进程占用的前一状态,不是消除信号量,只是为了避免死锁的
[/Quote]
Linux内核源代码情景分析 (上下册 高清非扫描 )
本PDF电子书包含上下两册,共1576页,带目录,高清非扫描版本。 作者: 毛德操 胡希明 丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 地址映射的全过程 2.3 几个重要的数据结构和函数 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页面的使用和周转 2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空
间
的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向
量
表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和返回 3.7 时钟中断 3.8 系统调用 3.9 系统调用号与跳转表 第4章
进程
与
进程
调度 4.1
进程
四要素 4.2
进程
三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6
进程
的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作 第5章 文件系统 5.1 概述 5.2 从路径名到目标节点 5.3 访问权限与文件安全性 5.4 文件系统的安装和拆卸 5.5 文件的打开与关闭 5.6 文件的写与读 5.7 其他文件操作 5.8 特殊文件系统/proc 第6章 传统的Unix
进程
间
通信
6.1 概述 6.2 管道和系统调用pipe() 6.3 命名管道 6.4
信号
6.5 系统调用ptrace()和
进程
跟踪 6.6 报文传递 6.7 共享内存 6.8
信号
量
第7章基于socket的
进程
间
通信
7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—accept()——接受连接请求 7.6函数sys—connect()——请求连接 7.7报文的接收与发送 7.8插口的关闭 7.9其他 第8章设备驱动 8.1概述 8.2系统调用mknod() 8.3可安装模块 8.4PCI总线 8.5块设备的驱动 8.6字符设备驱动概述 8.7终端设备与汉字信息处理 8.8控制台的驱动 8.9通用串行外部总线USB 8.10系统调用select()以及异步输入/输出 8.11设备文件系统devfs 第9章多处理器SMP系统结构 9.1概述 9.2SMP结构中的互斥问题 9.3高速缓存与内存的一致性 9.4SMP结构中的中断机制 9.5SMP结构中的
进程
调度 9.6SMP系统的引导 第10章系统引导和初始化 10.1系统引导过程概述 10.2系统初始化(第一阶段) 10.3系统初始化(第二阶段) 10.4系统初始化(第三阶段) 10.5系统的关闭和重引导
计算机操作系统(第三版)
《计算机操作系统》可作为计算机硬件和软件以及计算机
通信
专业的本科生教材,也可作为从事计算机及
通信
工作的相关科技人员的参考书。 目录 第一章 操作系统引论 1.1 操作系统的目标和作用 1 1.1.1 操作系统的目标 1 1.1.2 操作系统的作用 2 1.1.3 推动操作系统发展的主要动力 4 1.2 操作系统的发展过程 5 1.2.1 无操作系统的计算机系统 5 1.2.2 单道批处理系统 6 1.2.3 多道批处理系统 7 1.2.4 分时系统 9 1.2.5 实时系统 11 1.2.6 微机操作系统的发展 12 1.3 操作系统的基本特性 14 1.3.1 并发性 14 1.3.2 共享性 15 1.3.3 虚拟技术 16 1.3.4 异步性 17 1.4 操作系统的主要功能 18 1.4.1 处理机管理功能 18 1.4.2 存储器管理功能 19 1.4.3 设备管理功能 21 1.4.4 文件管理功能 21 1.4.5 操作系统与用户之
间
的接口 22 1.5 OS结构设计 24 1.5.1 传统的操作系统结构 24 1.5.2 客户/服务器模式 26 1.5.3 面向对象的程序设计 27 1.5.4 微内核OS结构 29 习题 33 第二章 进 程 管 理 2.1
进程
的基本概念 34 2.1.1 程序的顺序执行及其特征 34 2.1.2 前趋图 35 2.1.3 程序的并发执行及其特征 36 2.1.4
进程
的特征与状态 37 2.1.5
进程
控制块 41 2.2
进程
控制 43 2.2.1
进程
的创建 43 2.2.2
进程
的终止 45 2.2.3
进程
的阻塞与唤醒 46 2.2.4
进程
的挂起与激活 47 2.3
进程
同步 47 2.3.1
进程
同步的基本概念 47 2.3.2
信号
量
机制 50 2.3.3
信号
量
的应用 53 2.3.4 管程机制 55 2.4 经典
进程
的同步问题 58 2.4.1 生产者—消费者问题 58 2.4.2 哲学家进餐问题 61 2.4.3 读者—写者问题 63 2.5
进程
通信
65 2.5.1
进程
通信
的类型 65 2.5.2 消息传递
通信
的实现方法 66 2.5.3 消息传递系统实现中的若干问题 68 2.5.4 消息缓冲队列
通信
机制 69 2.6 线程 71 2.6.1 线程的基本概念 72 2.6.2 线程
间
的同步和
通信
75 2.6.3 线程的实现方式 77 2.6.4 线程的实现 78 习题 81 第三章 处理机调度与死锁 3.1 处理机调度的层次 84 3.1.1 高级调度 84 3.1.2 低级调度 86 3.1.3 中级调度 87 3.2 调度队列模型和调度准则 88 3.2.1 调度队列模型 88 3.2.2 选择调度方式和调度算法的若干准则 90 3.3 调度算法 91 3.3.1 先来先服务和短作业(
进程
)优先调度算法 91 3.3.2 高优先权优先调度算法 93 3.3.3 基于时
间
片的轮转调度算法 95 3.4 实时调度 97 3.4.1 实现实时调度的基本条件 97 3.4.2 实时调度算法的分类 99 3.4.3 常用的几种实时调度算法 100 3.5 产生死锁的原因和必要条件 103 3.5.1 产生死锁的原因 103 3.5.2 产生死锁的必要条件 105 3.5.3 处理死锁的基本方法 105 3.6 预防死锁的方法 106 3.6.1 预防死锁 106 3.6.2 系统安全状态 107 3.6.3 利用银行家算法避免死锁 108 3.7 死锁的检测与解除 111 3.7.1 死锁的检测 111 3.7.2 死锁的解除 113 习题 114 第四章 存 储 器 管 理 4.1 存储器的层次结构 116 4.1.1 多级存储器结构 116 4.1.2 主存储器与寄存器 117 4.1.3 高速缓存和磁盘缓存 117 4.2 程序的装入和链接 118 4.2.1 程序的装入 118 4.2.2 程序的链接 120 4.3 连续分配方式 121 4.3.1 单一连续分配 121 4.3.2 固定分区分配 122 4.3.3 动态分区分配 123 4.3.4 伙伴系统 126 4.3.5 哈希算法 126 4.3.6 可重定位分区分配 127 4.3.7 对换 129 4.4 基本分页存储管理方式 130 4.4.1 页面与页表 130 4.4.2 地址变换机构 131 4.4.3 两级和多级页表 133 4.5 基本分段存储管理方
UNIX环境高级编程
目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和
进程
7 1.5.1 程序 7 1.5.2
进程
和
进程
ID 7 1.5.3
进程
控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9
信号
12 1.10 UNIX时
间
值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时
间
限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之
间
的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时
间
76 4.19 utime函数 78 4.20 mkdir和rmdir函数 79 4.21 读目录 80 4.22 chdir, fchdir和getcwd函数 84 4.23 特殊设备文件 86 4.24 sync和fsync函数 87 4.25 文件存取许可权位小结 88 4.26 小结 89 习题 89 第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.6.1 输入函数 96 5.6.2 输出函数 97 5.7 每次一行I/O 98 5.8 标准I/O的效率 99 5.9 二进制I/O 100 5.10 定位流 102 5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令文件 110 6.3 阴影口令 112 6.4 组文件 113 6.5 添加组ID 114 6.6 其他数据文件 115 6.7 登录会计 116 6.8 系统标识 116 6.9 时
间
和日期例程 117 6.10 小结 121 习题 121 第7章 UNIX
进程
的环境 122 7.1 引言 122 7.2 main 函数 122 7.3
进程
终止 122 7.3.1 exit和_exit函数 122 7.3.2 atexit函数 124 7.4 命令行参数 125 7.5 环境表 126 7.6 C程序的存储空
间
布局 126 7.7 共享库 127 7.8 存储器分配 128 7.9 环境变
量
130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变
量
134 7.10.2 自动变
量
的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章
进程
控制 141 8.1 引言 141 8.2
进程
标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 setegid函数 163 8.10.3 组ID 163 8.11 解释器文件 164 8.12 system函数 167 8.13
进程
会计 171 8.14 用户标识 175 8.15
进程
时
间
176 8.16 小结 178 习题 178 第9章
进程
关系 180 9.1 引言 180 9.2 终端登录 180 9.2.1 4.3+BSD终端登录 180 9.2.2 SVR4终端登录 182 9.3 网络登录 182 9.3.1 4.3+BSD网络登录 182 9.3.2 SVR4网络登录 183 9.4
进程
组 183 9.5 对话期 184 9.6 控制终端 185 9.7 tcgetpgrp 和tcsetpgrp函数 187 9.8 作业控制 187 9.9 shell执行程序 189 9.10 孤儿
进程
组 193 9.11 4.3+BSD实现 195 9.12 小结 197 习题 197 第10章
信号
198 10.1 引言 198 10.2
信号
的概念 198 10.3 signal函数 203 10.3.1 程序起动 205 10.3.2
进程
创建 206 10.4 不可靠的
信号
206 10.5 中断的系统调用 207 10.6 可再入函数 209 10.7 SIGCLD语义 211 10.8 可靠
信号
术语和语义 213 10.9 kill和raise函数 213 10.10 alarm和pause函数 214 10.11
信号
集 219 10.12 sigprocmask 函数 220 10.13 sigpending函数 222 10.14 sigaction函数 223 10.15 sigsetjmp 和siglongjmp函数 226 10.16 sigsuspend函数 229 10.17 abort函数 234 10.18 system函数 235 10.19 sleep函数 240 10.20 作业控制
信号
241 10.21 其他特征 243 10.21.1
信号
名字 243 10.21.2 SVR4
信号
处理程序的附 加参数 244 10.21.3 4.3+BSD
信号
处理程序的附 加参数 244 10.22 小结 244 习题 244 第11章 终端I/O 246 11.1 引言 246 11.2 综述 246 11.3 特殊输入字符 250 11.4 获得和设置终端属性 254 11.5 终端选择标志 254 11.6 stty命令 258 11.7 波特率函数 259 11.8 行控制函数 260 11.9 终端标识 260 11.10 规范方式 263 11.11 非规范方式 266 11.12 终端的窗口大小 270 11.13 termcap, terminfo和 curses 271 11.14 小结 272 习题 272 第12章 高级I/O 273 12.1 引言 273 12.2 非阻塞I/O 273 12.3 记录锁 275 12.3.1 历史 276 12.3.2 fcntl记录锁 276 12.3.3 锁的隐含继承和释放 280 12.3.4 4.3+BSD的实现 281 12.3.5 建议性锁和强制性锁 284 12.4 流 288 12.4.1 流消息 289 12.4.2 putmsg和putpmsg函数 290 12.4.3 流ioctl操作 291 12.4.4 write至流设备 294 12.4.5 写方式 294 12.4.6 getmsg和getpmsg函数 294 12.4.7 读方式 295 12.5 I/O多路转接 296 12.5.1 select函数 298 12.5.2 poll函数 301 12.6 异步I/O 303 12.6.1 SVR4 303 12.6.2 4.3+BSD 303 12.7 readv和writev函数 304 12.8 readn和writen函数 306 12.9 存储映射I/O 307 12.10 小结 311 习题 311 第13章 精灵
进程
312 13.1 引言 312 13.2 精灵
进程
的特征 312 13.3 编程规则 313 13.4 出错记录 314 13.4.1 SVR4流log驱动程序 315 13.4.2 4.3+BSD syslog设施 316 13.5 客户机-服务器模型 319 13.6 小结 319 习题 319 第14章
进程
间
通信
320 14.1 引言 320 14.2 管道 320 14.3 popen和pclose函数 325 14.4 协同
进程
330 14.5 FIFO 333 14.6 系统V IPC 335 14.6.1 标识符和关键字 336 14.6.2 许可权结构 337 14.6.3 结构限制 337 14.6.4 优点和缺点 337 14.7 消息队列 338 14.8
信号
量
342 14.9 共享存储 346 14.10 客户机-服务器属性 351 14.11 小结 353 习题 353 第15章 高级
进程
间
通信
355 15.1 引言 355 15.2 流管道 355 15.3 传送文件描述符 358 15.3.1 SVR4 360 15.3.2 4.3BSD 361 15.3.3 4.3+BSD 364 15.4 open服务器第1版 366 15.5 客户机-服务器连接函数 371 15.5.1 SVR4 372 15.5.2 4.3+BSD 375 15.6 open服务器第2版 378 15.7 小结 385 习题 385 第16章 数据库函数库 386 16.1 引言 386 16.2 历史 386 16.3 函数库 386 16.4 实现概述 388 16.5 集中式或非集中式 390 16.6 并发 391 16.6.1 粗锁 391 16.6.2 细锁 391 16.7 源码 392 16.8 性能 409 16.8.1 单
进程
的结果 410 16.8.2 多
进程
的结果 410 16.9 小结 412 习题 412 第17章 与PostScript打印机
通信
413 17.1 引言 413 17.2 PostScript
通信
机制 413 17.3 假脱机打印 415 17.4 源码 417 17.5 小结 434 习题 434 第18章 调制解调器拨号器 435 18.1 引言 435 18.2 历史 435 18.3 程序设计 436 18.4 数据文件 437 18.5 服务器设计 439 18.6 服务器源码 439 18.7 客户机设计 463 18.7.1 终端行规程 463 18.7.2 一个
进程
还是两个
进程
464 18.8 客户机源码 465 18.9 小结 474 习题 474 第19章 伪终端 476 19.1 引言 476 19.2 概述 476 19.2.1 网络登录服务器 477 19.2.2 script程序 478 19.2.3 expect程序 479 19.2.4 运行协同
进程
479 19.2.5 观看长时
间
运行程序的输出 479 19.3 打开伪终端设备 480 19.3.1 SVR4 481 19.3.2 4.3+BSD 482 19.4 pty_fork函数 484 19.5 pty程序 486 19.6 使用pty程序 489 19.6.1 utmp文件 489 19.6.2 作业控制交互 489 19.6.3 检查长时
间
运行程序的输出 491 19.6.4 script程序 491 19.6.5 运行协同
进程
492 19.6.6 用非交互模式驱动交互式 程序 492 19.7 其他特性 494 19.7.1 打包模式 494 19.7.2 远程模式 494 19.7.3 窗口大小变化 495 19.7.4
信号
发生 495 19.8 小结 495 习题 495 附录A 函数原型 497 附录B 其他源代码 512 附录C 习题答案 518 参考书目 536
Linux
进程
间
通信
——使用
信号
量
这篇文章将讲述别一种
进程
间
通信
的机制——
信号
量
。注意请不要把它与之前所说的
信号
混淆起来,
信号
与
信号
量
是不同的两种事物。下面就进入
信号
量
的讲解。 一、什么是
信号
量
为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而
信号
量
就可以提供
进程
间
通信
——
信号
量
文章目录前言一、
信号
量
过程总结 前言
信号
量
是一个特殊的变
量
,一般取正数值。它的值代表允许访问的资源数目,获取资源时,需要对
信号
量
的值进行原子减一,该操作被称为 P 操作。当
信号
量
值为 0 时,代表没有资源可用,P 操作会阻塞。释放资源时,需要对
信号
量
的值进行原子加一,该操作被称为 V 操作。
信号
量
主要用来同步
进程
。
信号
量
的值如果只取 0,1,将其称为二值
信号
量
。如果
信号
量
的值大于 1,则称之为计数
信号
量
。 临界资源:同一时刻,只允许被一个
进程
或线程访问的资源 临界区:访问临界资源的代码段 一、
信号
量
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章