共享内存的读写冲突问题:
在设计上尽量就是一个写,一个或多个读。那么要解决的问题有两个:
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(&