1.使用环形缓冲区,进行数据交换,threadWrite -> buf -> threadReadthreadWrite{memcpy(buf[pushCount & mask], value, size);pushCount++;...}threadRead{...}若mask == 2, pushCount从0开始累加当pushCount = 0pushCount & mask == 0当pushCount = 1pushCount & mask == 0当pushCount = 2pushCount & mask == 2这是不是出问题了呢,数组的第二个位置没写入,第一个位置被写了两遍2.环形队列的掩码mask是不是有什么特殊要求,比如奇偶性之类的,望大神解答
1 回答
慕少森
TA贡献2019条经验 获得超9个赞
如果你用&
,掩码mask就必须满足
环形缓冲区实际上用的是取余操作来保证不爆炸的。如果你用正常的取余%
,那么对mask没有要求。如果用按位与&
的话,只有mask满足上述条件时,所有二进制位都为1
,才能与取余等价。
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消