问题标签 [circular-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
thread-safety - 这个循环事件缓冲区线程安全吗?
我为我的 MCU 创建了一个循环缓冲区结构,其中结构元素是:
- 事件缓冲区[m]
- 头
- 尾巴
我使用这些事件来驱动状态机。对于我的应用程序,ISR 是生产者,而我的主要是消费者。ISR 不能互相抢占,每个 ISR 具有相同的优先级。ISR 将事件推送到事件缓冲区的头部索引并增加头部变量,而我的主要代码从事件缓冲区的尾部索引弹出事件并增加尾部变量。如果头或尾指针到达缓冲区的末尾,它们只会环绕。
在主代码中,我检查缓冲区,如:
在 ISR 中,我将事件添加到缓冲区,例如:
如果我必须从 main 将事件发布到事件缓冲区,我会禁用并启用中断。
我想知道这个结构是否是线程安全的,或者我是否必须在检查缓冲区是否为空(Head==Tail,没有要处理的事件)或调度事件或增加 tail 变量时禁用和启用主循环中的中断?我错过了什么吗?
c - 无法显示循环队列中的元素
我正在学习循环队列,我遇到了一些错误。
在显示队列时,它只显示第一个和最后一个元素,删除一个元素后它变得更糟,现在我不知道如果它是在插入元素或显示时我到底哪里出错了。
这是我的代码:
这是输出:
java - 为什么我的 Circular Array Queue 没有添加最后输入的值?
我在用 Java 完全实现我的 Circular Array Queue 时遇到了一些困难。具体来说,我的 enqueue 未能将队列中输入的最后一个值排队。我已经测试了出列和重新入列值,它工作正常,直到我尝试插入最后一个值,它不会插入任何内容。
我已经咨询了一些 TA 可能出了什么问题,并搜索了 StackOverflow 以前的问题,但都没有产生积极的结果。
任何帮助将不胜感激。
c++ - 为什么我的队列数据结构的动态分配数组实现不会在第二次调用时更新?
我正在按照大学的要求学习数据结构。我已经使用动态数组实现了队列 DS,但它不知何故不起作用。它更新第一个入队方法调用的值,但从第二个调用开始,它什么也不做。
我的代码
PS 我知道实现是不完整的,我还没有处理所有的边缘情况。那是因为我无法正常工作。
PPS 它适用于静态数组。但不是动态分配的。
c - 在循环队列中如何检查迭代器是否大于等于队列的前面元素
这里的主要目标是根据到达时间对readyQ中的PCB进行排序,我尝试使用插入排序来执行此操作,但我找不到合适的条件让插入排序的内部循环为队列运行,直到迭代器i大于等于readyQ的前面元素。如果readyQ已满,即当最后一个元素出现在readyQ中时,我在程序中编写的条件将继续循环,否则它将完美运行。
请建议合适的循环条件,以便即使最后一个元素出现在readyQ中,代码也能完美运行
c - 从C中的循环队列中弹出一个元素
因此,我尝试删除循环队列中的特定元素,并将其索引用作前后。
当我运行代码时:
我得到了这样的输出(只有删除部分): -
$ 删除的元素是:6
$ Front: 4
$ Rear: 2
$ Items: { 3, 9, 5, 7, 0 }
$ 删除的元素是:9
$ Front: 0
$ Rear: 1
$ Items: { 5, 7 }
$ 删除的元素是:5
$ 前:1
$ 后:1
$ 项目:{ 7 }
我不明白为什么会这样……有什么解释和解决方案吗?