我已经在C语言中将标准单用户单生成器队列实现为循环缓冲区,由一个数组和两个索引组成:一个用于读取,一个用于写入。
我的循环缓冲区是一种类型,如果您尝试将项目插入完整队列并使用一个空槽来区分空环缓冲区和完整缓冲区,则会返回错误。
在调试它的时候,我注意到它有时滑入一致状态,你只能在获得返回值之前一次读取一个项目,这意味着缓冲区已满,即使有一个正在进行的线程确实插入了所有的时间。
我认为我必须在实施中做一些愚蠢但却找不到任何东西。然后我决定仔细检查逻辑并重新阅读描述此类队列的Wikipedia value。
令我惊讶的是,我在文中注意到以下神秘的评论:
如果您无法读取缓冲区边框,则会遇到很多情况,您只能一次读取一个元素。
所以,如果我理解正确的含义,这似乎表明这是实现这种环形缓冲区的一种继承问题。
唉,我的虚弱大脑正在失去理解这个问题的根本原因:为什么会发生这种情况?什么序列的插入和擦除可以使这种环形缓冲区进入这种状态?非常感谢您的帮助。
答案 0 :(得分:1)