环形队列的一些看法

来源:互联网 发布:遗作剧情知乎 编辑:程序博客网 时间:2024/06/05 18:27

      最近在搞视频播放方面的工作,其中有使用一个环形队列对decoder进行缓冲,以达到播放流畅的效果。但这个环形队列有些问题,所以导致视频播放总是不流畅。调整过之后,发现其中的bug来自于一个flag标志位的判断。

      都知道环形队列需要一个flag标志位来判断这个队列是满还是空,假设标志位flag=0表示空,flag=1表示满,则程序运行后,如果头指针head和为指针tail相等,则就认为环形队列满,置标志位flag=1,反之读取数据后就认为这个环形队列不满,置标志位flag=0。

      一般环形队列的实现都是这样的,但是在多线程操作的时候,如果对性能有要求,都不会使用互斥体对数据进行保护,而多个线程操作的时候就很容易造成这个flag的值有问题,影响环形队列的正常工作。所以我想,如果不要flag,只通过环形队列自己来控制是否可以?发现只有当tail在head后面时才可能出现环形队列满的情况,那么如果控制环形队列生产者,使其在向队列中生产数据的时候,不允许tail=head的情况出现,这样就可以不要flag标志位,同时也可以去掉互斥体的保护,不影响性能,但不好之处就是需要浪费一定得队列空间。

      总之,具体应用具体取舍了,毕竟软件不可能十全十美,是有取舍的。

原创粉丝点击