信号量————生产者与消费者模型(环形缓冲区)

本文介绍了信号量在进程间通信中的作用,特别是在生产者消费者模型中的应用。通过信号量,可以实现线程间的同步,例如在环形缓冲区场景中,生产者和消费者通过两个信号量分别控制缓冲区的空闲空间和数据数量。文中还探讨了单生产者单消费者和多生产者多消费者模型,并强调在多线程环境下,适当的位置添加互斥锁以防止数据竞争和死锁问题。
摘要由CSDN通过智能技术生成

一. 信号量

    在进程间通信中有一种通信机制是信号量,它往往标识着一个临界资源的有无来控制不同的进程是否能访问到这个临界资源,它创建出来一般是一个信号量集的形式。

    这里要提到的信号量,也是一个计数器,用来标识资源的个数,我们知道完成线程之间的互斥可以使用互斥锁,其实mutex也可以认为是一个计数器标识资源的可用数量,只是它的值非0即1,加锁时表示要使用资源,将mutex减1,释放锁表示有资源可用,将mutex的值还原为1。

    而信号量和mutex类似,只是它标识资源的数量可以大于1,用来实现线程间的同步,即,如果信号量的值为1,则可以认为和互斥锁一样。下面要谈及的是POSIX semaphore库函数,这种信号量不仅可以用于同一进程的线程间同步,也可用于不同进程间同步。

-------------------------------------------------------------------------------------------


二. 信号量函数

  1. 信号量的创建及销毁

wKioL1ccG9PDucYtAAAjIsdGZmk716.png

函数参数中,

sem是一个指向sem_t也就是信号量类型的一个指针;

pshared表示该信号量是否用于不同进程间同步,为0表示用于同一进程的线程间同步;

value表示要将该信号量初始化的值;


wKiom1ccGw6yjDNBAAAJW6lCbWo933.png

函数参数中,sem表示要销毁哪一个信号量;


2. 信号量值的增加及减少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值