【问题标题】:Can I read and write a FIFO from concurrent threads in .NET?我可以从 .NET 中的并发线程读取和写入 FIFO 吗?
【发布时间】:2010-09-10 10:51:37
【问题描述】:

我正在使用Queue<T> 来缓存视频。这个想法是用数据填充它(Enqueue),开始播放(Dequeue)并在数据到达时不断填充。我可以从后台线程进行填充吗?

【问题讨论】:

  • 是什么让你觉得你做不到?
  • 嗯,它是同一个对象,我不知道它的内部工作原理。
  • 所以你真正的问题是你是否需要锁定它。如果您可以编写代码并且它可以编译和运行,那么您就可以做到。

标签: .net multithreading concurrency queue fifo


【解决方案1】:

听起来您正在寻找生产者/消费者队列。您可以使用Queue<T> 执行此操作,但您需要添加锁定以确保您永远不会同时从多个线程访问队列。

如果您使用的是 .NET 4,Parallel Extensions 使用 IProducerConsumerCollection<T>BlockingCollection<T> 为您完成所有艰苦的工作,让这非常变得更容易。

【讨论】:

  • @sztomi:使用锁和等待/通知创建生产者/消费者队列并不困难。它只需要一定的照顾:)
  • 当然,我知道:)。问题是我是否必须锁定。但是很高兴知道他们在 4 中实现了它,即使我现在不能使用它,所以谢谢。
【解决方案2】:

当然,如果您使用 lock() 或使用 Monitor 对象锁定对队列的访问,则可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多