进程间通信--信号量

进程间通信系列: 进程间通信--信号 前次我们已经讲过了在进程中信号来进行进程间的一些简单通信 如果是多线程的情景下呢我门如何保证多线程情景下的一个同步问题呢? 下开始接触信号量的应用什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占
摘要由CSDN通过智能技术生成

进程间通信系列:
进程间通信--信号
前次我们已经讲过了在进程中信号来进行进程间的一些简单通信
如果是多线程的情景下呢我门如何保证多线程情景下的一个同步问题呢?
下开始接触信号量的应用

什么是信号量

为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。

信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。而可以取多个正整数的信号量被称为通用信号量。这里主要讨论二进制信号量。

我是在做DSP内核通信的时候遇到了这些问题,我们可以使用信号量完成两个操作:

pend():if(cnt==0) HOP else {cnt-- pass};
send():cnt++

在linux下主要有以下几个函数帮助我们完成无名信号量的使用:

  • semget 建立sem
int semget(key_t key, int num_sems, int sem_flags);

可以创建一个信号量,并设置信号量的权限,已有的num。

  • semop
int semop(int sem_id, struct sembuf *sem_opa, size_t num_sem_ops);

其中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值