两个线程如何以最小的阻塞访问公共缓冲区数组?(C#)

Jel*_*mma 3 c# multithreading locking buffering

我正在处理一个图像处理应用程序,我的主线程上有两个线程:

1 - CameraThread,用于捕获网络摄像头中的图像并将其写入缓冲区

2 - ImageProcessingThread,从该缓冲区获取最新图像进行过滤.

这是多线程的原因是因为速度是至关重要的,我需要让CameraThread继续抓取图片并使ImageProcessingThread在处理上一张图像时准备好接收最新的捕获.

我的问题是找到一种快速且线程安全的方式来访问公共缓冲区,我认为理想情况下,它应该是一个三重缓冲区(图像[3]),这样如果ImageProcessingThread很慢,那么CameraThread可以继续写在另外两个图像上,反之亦然.

什么样的锁定机制最适合这种线程安全?

我查看了锁定语句,但似乎它会使一个线程阻塞 - 等待另一个完成,这将是三重缓冲点.

提前感谢任何想法或建议.

J.

Pau*_*ner 8

这可能是生产者 - 消费者模式的教科书范例.

如果您打算使用.NET 4,则可以使用IProducerConsumerCollection<T>相关的具体类来提供功能.

如果没有,请阅读本文以获取有关模式的更多信息,并阅读本问题以获得有关编写自己的线程安全实现的阻塞先进先出结构的指导.