linux 内核信号量与用户态信号量(system v,linux内核态和用户态的信号量

在Linux的内核态和用户态都有信号量,使用也不同,简单记录一下。

1> 内核信号量,由内核控制路径使用。

内核信号量是struct semaphore类型的对象,它在中定义

struct semaphore {

atomic_t count;

int sleepers;

wait_queue_head_t wait;

}

内核信号量的相关函数

初始化:

void sema_init (struct semaphore *sem, int val);

申请内核信号量所保护的资源:

void down(struct semaphore * sem); // 可引起睡眠

释放内核信号量所保护的资源:

void up(struct semaphore * sem);

2> 用户态信号量分为两种,一种为POSIX,另一种为 SYSTEM V

POSIX信号量的引用头文件是,而SYSTEM V信号量的引用头文件是从使用的角度,System V信号量是复杂的,而Posix信号量是简单。比如,POSIX信号量的创建和初始化或PV操作就很非常方便。

这里只是简单列举POSIX信号量

int sem_init(sem_t *sem, int pshared, unsigned int value); // 其中sem是要初始化的信号量;pshared为0,表示线程间共享。为非零值,表示在进程间共享;value是信号量的初始值。

int sem_wait(sem_t *sem); // 如果信号量大于1,该函数对信号量减1,然后立即返回;如果信号量是0,就会阻塞,直到信号量大于0。该函数返回0,表示成功;返回-1,表示失败,且sem值不会被改变。

int sem_post(sem_t *sem); //把指定的信号量sem的值加1; 呼醒正在等待该信号量的任意线程。该函数成功时,返回0;失败时,返回-1,且sem值不会被改变

相关文章:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值