我正在爲wp7開發一個應用程序。我需要一個同步讀取和寫入。 所以我在隊列創建此類c#線程同步
public class SynchronizedPacketQueue
{
[DataMember]
public List<Packet> packetsQ;
public SynchronizedPacketQueue()
{
packetsQ = new List<Packet>();
}
public int Count
{
get { return packetsQ.Count; }
private set{}
}
public Packet Dequeue()
{
lock (packetsQ)
{
if (packetsQ.Count == 0)
{
Monitor.Wait(packetsQ);
}
Packet packet = packetsQ[0];
packetsQ.RemoveAt(0);
return packet;
}
}
public void Enqueue(Packet packet)
{
lock (packetsQ)
{
packetsQ.Add(packet);
Monitor.Pulse(packetsQ);
}
}
}
現在我threadwrite入隊的分組和threadread讀取來自queue.Both是無限運行的線程。 但我不知道一些如何在packetQ.removeat(0)處阻塞threadwrite。
發生這種情況,因爲你是在packetsQ應用鎖。您應該對某個其他對象應用鎖以將其刪除。 – shalki