Linux--POSIX信号量与读写锁

本文介绍了Linux环境下的POSIX信号量和读写锁。信号量用于实现同步和互斥,包括初始化、等待、发布和销毁等接口。在案例中,通过信号量解决生产者消费者问题。读写锁则适用于读多写少的情况,避免了读写冲突,包括读锁、写锁的获取和释放。通过读写锁,能提高并发性能,防止不必要的进程阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:POSIX信号量:

1.基本概念

  • POSIX信号量和SystemV信号量作用相同,都是来实现同步或者互斥机制,本质也是计数器,通常用它来表示他所保护的临界资源的资源数目。

2.相关接口

初始化信号量:

  • int sem_init(sem_t *sem, int pshared, unsigned int value);//第二个参数0表示线程间共享,非零表示进程间共享。

等待信号集(相当于P操作)

  • int sem_wait(sem_t *sem);

发布信号(相当于V操作)

  • int sem_post(sem_t *sem);

销毁信号量

  • int sem_destroy(sem_t *sem);

3.小案例:

  • 上一节生产者–消费者的例子是基于链表的,这次基于环形队列,实现以下功能:如果队列为空那么保证生产者先运行;如果队列满了,保证消费者先运行。这次可以将队列的空间和队列的数据看作是两份不同的资源,而生产者只关心有没有”空间“资源,消费者只关心有没有”数据“资源,所以这里就需要有两个信号量来表示两份不同的资源,semBlank表示”空间“资源,初始值设为队列的总容量,semData表示”数据“资源,初始值设为0.
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值