信号量

来源:互联网 发布:易企秀mac官网下载 编辑:程序博客网 时间:2024/05/29 10:51

以下笔记摘自《linux设备驱动开发详解》
信号量的描述:
信号量是操作系统最典型的用于同步和互斥的手段,一个信号量是可以给它赋值的,且它的值可为0、1或n,信号量与操作系统中的经典概念PV操作相对应:
P(S):将信号量的值减一,即S=S-1;如果S>=0该进程继续执行,否则该进程置为等待状态,排入等待队列
V(S):将信号量的值加一,即S=S+1;如果S>0,唤醒等待队列中等待的进程

信号量的操作:
1、定义
struct semaphore sem;
2、初始化
void sem_init(struct semaphore *sem,int val);
3、获取
void down(struct semaphore *sem);用于获取信号量,会导致休眠,因此不能在中断上下文中使用
void down_trylock(struct semaphore *sem)如果能获得该信号量返回0,否则返回非0,不会导致进程休眠,可在中断上下文中使用
4、释放
void up(struct semaphore *sem);
作为一种可能的互斥手段,信号量可以保护临界区,它的使用方式与自旋锁类似,与自旋锁的相同点:
获得信号量的进程才能执行临界区的代码,不同的:当获取不到信号量时,进程不会原地打转而是进入休眠等待

原创粉丝点击