LDD读书笔记第五章-并发和竞态(一)

linux信号量的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <asm /semaphore.h>  /*信号量相关头文件*/
struct semaphore		/*信号量相关结构体*/
/*初始化相关函数*/
void  sema_init(struct semaphore *sem,int val); 
/*初始化信号量函数*/
DECLARE_MUTEX(name);	/*创建互斥体并初始化为1*/
DECLARE_MUTEX_LOCKED(name);	/*创建互斥体并初始化为0*/
void init_MUTEX(struct semaphore *sem); /*初始化互斥体为1*/
void init_MUTEX_LOCKED(struct semaphore *sem); /*初始化互斥体为0*/
/*down&up 相关函数*/
void down(struct semaphore *sem); /*不可中断*/
int down_interruptible(struct semaphore *sem); /*可中断*/
int down_trylock(struct semaphore *sem); /*立即退出*/
void up(struct semaphore *sem); /*释放信号量*/
</asm>

down_trylock函数在获取信号量失败时立即退出而不会等待。成功返回0,失败返回非零值。

读取者/写入者信号量

读取者/写入者信号量允许有一个写入者和无穷多个读取者。
当只需要读取数据时使用读取者信号量,仅当需要写入数据时获得写入者信号量。
[阅读全文] »