我创建了一个队列向量。队列中有10个向量和大约1000个元素。然后我尝试以循环方式将所有向量中的一个元素从队列中出列。但我观察到一个非常奇怪的现象。我看到一些向量有2个元素出列,有些没有。
struct pkt{
int data;
int time;
};
//Input queues are already filled with 1000 packets
std::vector<std::queue<pkt>> per_port_input_queue;
std::vector<std::queue<pkt>> per_port_output_queue;
// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[decoded_pkt.data].pop();
}
void send_to_output(pkt decoded_pkt)
{
per_port_output_queue[decoded_pkt.data].push(decoded_pkt);
}
您可以在下面找到观察到的输出和我的预期输出。
========================================================
Port I/p (t=0) (after dequing My
5 pkt) Expected result
========================================================
0 1000 1000 999
1 1000 1000 999
2 1000 1000 999
3 1000 998 999
4 1000 1000 999
5 1000 1000 1000
6 1000 999 1000
7 1000 999 1000
8 1000 1000 1000
9 1000 999 1000
有人可以澄清为什么会发生这种情况以及如何避免这种情况。在c ++中使用队列是否有问题
答案 0 :(得分:3)
// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[decoded_pkt.data].pop(); <<<<<======
}
弹出队列取决于您从第i个队列中读取的数据,因此这并不奇怪。如果你的意思是阅读然后弹出相同的队列你需要去
// Dequeing one element at a time in a round-robin fashion
for(int i=0;i<5; i++)
{
decoded_pkt=per_port_input_queue[i].front();
send_to_output(decoded_pkt);
per_port_input_queue[i].pop();
}