C# “我怎么能?”;删除“;列表中的项目没有。是否删除?

C# “我怎么能?”;删除“;列表中的项目没有。是否删除?,c#,C#,我有一个由一个线程填充的字节[]列表,然后我有另一个线程从该列表中读取并通过网络发送项目 我希望每次读取thread2中的项目时都能将其从内存中清除。但是由于我使用的是线程,如果我使用.remove,我将不得不处理更改列表索引的问题,并且在执行此操作时不允许thread1对其进行写入。因此,我不干涉列表的索引,我只是将我使用的项更改为null。这样做的最佳方式是什么,这样就不会浪费内存空间?基于这个问题,它听起来像是为关键部分分配的任务(又称为锁) 创建锁对象并在lock下执行读/写操作: ob

我有一个由一个线程填充的字节[]列表,然后我有另一个线程从该列表中读取并通过网络发送项目


我希望每次读取thread2中的项目时都能将其从内存中清除。但是由于我使用的是线程,如果我使用.remove,我将不得不处理更改列表索引的问题,并且在执行此操作时不允许thread1对其进行写入。因此,我不干涉列表的索引,我只是将我使用的项更改为null。这样做的最佳方式是什么,这样就不会浪费内存空间?

基于这个问题,它听起来像是为关键部分分配的任务(又称为

创建锁对象并在
lock
下执行读/写操作:

object lockList = new object();

byte ReadFromList(int index) 
{
  lock(lockList) { return theList[index]; }
}

void RemoveFromList(int index) 
{
  lock(lockList) { theList.Remove(index); }
}

请注意,通常对于消费者/制作人,您会使用。

根据问题,这听起来像是针对关键部分的分配(也称为
锁定

创建锁对象并在
lock
下执行读/写操作:

object lockList = new object();

byte ReadFromList(int index) 
{
  lock(lockList) { return theList[index]; }
}

void RemoveFromList(int index) 
{
  lock(lockList) { theList.Remove(index); }
}

请注意,通常对于消费者/制作人,您会使用。

听起来您想使用a


ConcurrentQueue
是线程安全的先进先出集合,因此第一个线程将使用将项目推入队列,而第二个线程将尝试使用从该队列读取项目。

听起来您想使用


ConcurrentQueue
是线程安全的先进先出集合,因此第一个线程将使用将项目推入队列,而第二个线程将尝试使用从该队列读取项目。

为什么不使用A?为什么不使用A?当我使用
TryDeQueue
并成功读取时,它会把它从队列中删除吗?@meme是的。TrydQueue尝试删除并返回并发队列开头的对象。谢谢您的回答。这帮了大忙。:)当我使用
TryDeQueue
并成功读取时,它是否会将其从队列中删除?@meme yes。TrydQueue尝试删除并返回并发队列开头的对象。谢谢您的回答。这帮了大忙。:)