为了账号安全,请及时绑定邮箱和手机立即绑定

环形缓冲区使用&操作是否有BUG?

环形缓冲区使用&操作是否有BUG?

陪伴而非守候 2018-06-23 09:34:05
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就必须满足

2n−1


环形缓冲区实际上用的是取余操作来保证不爆炸的。如果你用正常的取余%,那么对mask没有要求。如果用按位与&的话,只有mask满足上述条件时,所有二进制位都为1,才能与取余等价。


查看完整回答
反对 回复 2018-07-20
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信