【发布时间】:2018-01-29 23:08:01
【问题描述】:
我有一个从 ConcurrentQueue 发送数据包的连续循环:
ConcurrentQueue<packet> queue = new ConcurrentQueue<packet>();
while(true){
packet data;
if (!queue.TryPeek(out packet)) continue;
send(data);
queue.TryDequeue(out data); //remove sent packet from the queue
}
特定端口上的每个数据包都有一个分配的优先级,(空、低、中、高)等。
public struct packet
{
public byte[] data;
public uint Length;
public address addr;
public string priority;
}
我可以使用哪种算法先发送高优先级数据包而不阻塞队列中的其他数据包?
例子:
while(true){
packet data;
if (!queue.TryPeek(out packet)) continue;
foreach(packet x in queue)
{
if(x.priority == "high")
{
send(data);
queue.TryDequeue(out data);
}
}
send(data);
queue.TryDequeue(out data);
}
示例将不起作用,因为仅发送和删除队列中的第一个数据包。 我不确定这是否是正确的方法。
【问题讨论】: