OS - 并发与竞争

 

Linux 旗标实现  <asm/semaphore.h> 在头文件中,struct semaphore 

 

有几种初始化旗标的方法

第一种,直接创建一个旗标,接着使用sema_init 来设定它

void sema_init(struct semaphore *sem, int val);
val 是安排给旗标的初始值。

 

 

第二种, 以互斥锁的模式使用。

DELCARE_MUTEX(name);  将name置1
DECLARE_MUTEX_LOCKED(name); 将name置0

 

name 为旗标变量

 

第三种,如果互斥锁必须在运行时间初始化,使用下列中的一个

void init_MUTEX(struct semaphore *sem);
void init_MUTEX_LOCKED(struct semaphore *sem);

 

 

在Linux中,P函数称为down -- down指函数递减旗标的值,有3个版本的down

void down(struct semaphore *sem);
int down_interruptible(struct semaphore *sem);
int down_trylock(struct semaphore *sem);

 

 

V的Linux对应物是up

void up(struct semaphore *sem);

 

posted @ 2018-01-07 15:24  elewei  阅读(218)  评论(0)    收藏  举报