共享内存防止读写冲突

本文讨论了共享内存中出现的读写冲突问题,强调了一写多读的设计原则。提到了解决读写同步问题的策略,如使用写优先的读写锁,并通过信号或futex通知读者数据更新。此外,还列举了使用共享内存需要注意的事项,包括原子性创建、初始化同步、使用mutex和cond进行读写互斥,以及如何在共享内存中构建数据结构。
摘要由CSDN通过智能技术生成

共享内存的读写冲突问题:
在设计上尽量就是一个写,一个或多个读。那么要解决的问题有两个:
1. 读写同步问题,例如如果写一段数据中就有人来读了,那就是读到了一半旧的一半新的数据,播放帧就是花屏,又例如写结构体,先写帧地址,在写帧长度,那么user就可能读到新的地址和旧的长度导致越界(实际和读写锁一样:写比读优先,写时不允许读写,多个可以同时读)。
2. 写了之后通知读者有更新。和信号量的一对一不同,我们需要多个读者读同一个资源,因此采用信号或futex通知。

int futex(int *uaddr, int op, int val, const struct timespec *timeout,
                 int *uaddr2, int val3);

例如:
等待参数1地址的值改变(自己知道的现值是参数3),参数2为op。timeout为最多等待的时间,为NULL则不更新就一直阻塞。后两个参数忽略。
futex(&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值