注:读者可以尝试一下注释掉初始化步骤,进程在运行时会出现何种情况(进程在申请资源时会睡眠),同时可以像程序结尾给出的注释那样,把该程序编译成两个不同版本 。下面是本程序的运行结果(操作系统gentoo):
create semaphore success, initialize itowner's uid is 1007owner's gid is 1007creater's uid is 1007creater's gid is 1007the number of entries in semaphore map is 32000 max number of semaphore identifiers is 128 mas number of semaphores in system is 32000 the number of undo structures system wide is 32000 max number of semaphores per gi_semid is 250 max number of ops per semop call is 32 max number of undo entries per process is 32 the sizeof of struct sem_undo is 20 the maximum semaphore value is 32767 before semop, semun_arg.buf->sem_otime: 0now ask the resourceask the resource successafter semop, semun_arg.buf->sem_otime: 1398501342now free the resourceremove sem okSummary:信号灯与其它进程间通信方式有所不同,它主要用于进程间同步 。通常所说的系统V信号灯实际上是一个信号灯的集合,可用于多种共享资源的进程间同步 。每个信号灯都有一个值,可以用来表示当前该信号灯代表的共享资源可用(available)数量,如果一个进程要申请共享资源,那么就从信号灯值中减去要申请的数目,如果当前没有足够的可用资源,进程可以睡眠等待,也可以立即返回 。当进程要申请多种共享资源时,linux可以保证操作的原子性,即要么申请到所有的共享资源,要么放弃所有资源,这样能够保证多个进程不会造成互锁 。Linux对信号灯有各种各样的限制,程序中给出了输出结果 。另外,如果读者想对信号灯作进一步的理解,建议阅读sem.h源代码,该文件不长,但给出了信号灯相关的重要数据结构 。
推荐阅读
- 红茶时间越久越好吗,普洱茶生茶判别
- 神舟十一号飞船的发射时间 神舟十号飞船发射火箭返回时间
- 凤凰山ufo神秘事件 凤凰山UFO事件
- 立冬下雨好还是天晴好?
- 一天最佳三个运动时间是何时?
- 空间站|天舟三号从空间站后端绕前端对接:将迎接天舟四号、神舟十四号载人飞船
- 面试官:知道时间轮算法吗?在Netty和Kafka中如何应用的?
- 灵异真实故事民间 灵异民间故事
- 启元世界:打造AI决策智能体,用小样本实现10的26次方复杂空间决策
- 2021年中国空间站计划 我国空间站将在2022年前后建成并运营
