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,失败返回非零值。
读取者/写入者信号量
读取者/写入者信号量允许有一个写入者和无穷多个读取者。
当只需要读取数据时使用读取者信号量,仅当需要写入数据时获得写入者信号量。
[阅读全文] »