读写信号量(rw_semaphore)又叫读写锁。
允许多个读者同时持有该信号量;当有一个写者持有该信号量时,其他读者跟写者不可持有该信号量;当写者写完后,可以降级为读者。读写信号量使用于读多写少的情况下使用。
DECLARE_RWSEM(name);
//声明一个读写信号量,并对其初始化
struct rw_semaphore *sem;
init_rwsem(sem);
//void init_rwsem(struct rw_semaphore *sem);
//对读写信号量进行初始化
down_read(sem);
//void down_read(struct rw_semaphore *sem);
//获取读资格,如果获取资格失败,则该线程会被挂起
down_read_trylock(sem);
//int down_read_trylock(struct rw_semaphore *sem);
//尽力获取读资格,如果获取失败,不会被挂起;成功返1,失败返0
down_write(sem);
//void down_write(struct semaphore *sem);
//获取写资格,如果获取失败也会被挂起
down_write_trylock(sem);
//int down_write_trylock(struct semaphore *sem);
//
up_read(sem);
//void up_read(struct semaphore *sem);
//释放信号量
up_write(sem);
//void up_write(struct rw_semaphore *sem);
//
downgrade_write(sem);
//void downgrade_write(struct rw_semaphore *sem);
//把写者降级为读者
读写信号量适于在读多写少的情况下使用