信号量的分类(参考别人,自己总结)
来源:互联网 发布:labview软件架构 编辑:程序博客网 时间:2024/05/21 11:16
首先,信号量分为内核信号量和用户进程信号量。
一、内核信号量
相关的函数为:
(1)初始化:
void sema_init (struct semaphore *sem, int val);
void init_MUTEX (struct semaphore *sem); //将sem的值置为1,表示资源空闲
void init_MUTEX_LOCKED (struct semaphore *sem); //将sem的值置为0,表示资源忙
(2)申请内核信号量所保护的资源:
void down(struct semaphore * sem); // 可引起睡眠
int down_interruptible(struct semaphore * sem); // down_interruptible能被信号打断
int down_trylock(struct semaphore * sem); // 非阻塞函数,不会睡眠。无法锁定资源则
马上返回
(3)释放内核信号量所保护的资源: void up(struct semaphore * sem);
二、用户态信号量
用户态信号量又分为System V信号量与Posix信号量。其中,POSIX信号量又分为有名信号量与无名信号量,有名信号量存在文件中,无名信号量存在内存中,Linux中只实现了无名信号量。System V信号量常用于进程同步,是一个或多个信号量的集合,所属头文件<sys/sem.h>,使用复杂;Posix信号量常用于线程同步,所属头文件<semaphore.h>,使用简单。
System V与Posix信号量函数清单如下:
Systm VPOSIXsemctl()sem_getvalue()semget()sem_post()semop()sem_timedwait()sem_trywait()
sem_wait()
无名信号量如下:
sem_init()
sem_destroy()
有名信号量如下:
sem_close()
sem_open()
sem_unlink()
其中,POSIX 无名信号量的2个函数原型如下:
int sem_init(sem_t *sem,int pshared,unsigned int value);
int sem_destroy(sem_t *sem);
此处sem_init有3个参数,与内核中的不同,pshared为信号量最多由几个进程共享。Linux中只能取0。value一般为1,表示资源可用,为0表示不可用。
- 信号量的分类(参考别人,自己总结)
- 自己catalog 配置 成功 + 别人的参考
- 面试参考别人总结
- 读写xml文件的2个小函数(参考别人的,自己稍作整理)
- 读写xml文件的2个小函数(参考别人的,自己稍作整理)
- MFC中各类指针的引用(引用别人的日志以便自己参考)
- java连接数据库(参考别人和结合自己的笔记)
- 自己创建maven项目工程说明,参考别人的
- 看别人的总结自己的
- javascript变量声明(参考别人的)
- 汉诺塔 参考别人的
- 杭电参考了别人的题记得写总结
- linux 的一些命令总结(别人的自己整理下赫赫)
- 模板整理(总结别人的及自己的,每周更新)
- 别人总结的牛人博客,用于自己的学习。
- day03作业代码 自己写的还有老师讲的 还有参考别人的
- 参考别人代码的问题
- cocopods借鉴别人的代码以及自己应用总结
- 经纬财富:咸阳现货白银如何判断牛熊市
- IE browser use URL to login web site
- Save and Load from XML
- Eclipse突然不能启动
- DB2备份
- 信号量的分类(参考别人,自己总结)
- js开发手册
- how-to-set-environment-path-variable
- js 中 split 和replace的候用
- Maven3入门
- c:forEach 遍历集合中的元素,判断是否是最后一个元素
- 使用scala容器
- 为什么流量过万转化率却很低?
- weka[7] - Adaboost