出队时的奇怪现象
strange phenomenon while dequeuing
我创建了一个队列向量。队列中有 10 个向量和大约 1000 个元素。然后,我尝试以循环方式使所有向量中的队列中的一个元素出队。但是我观察到一个非常奇怪的现象。我看到一些向量有 2 个元素出队,有些有 none。
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++
中使用队列有什么问题吗
// 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();
}
我创建了一个队列向量。队列中有 10 个向量和大约 1000 个元素。然后,我尝试以循环方式使所有向量中的队列中的一个元素出队。但是我观察到一个非常奇怪的现象。我看到一些向量有 2 个元素出队,有些有 none。
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++
中使用队列有什么问题吗// 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();
}