ConcurrentQueue是如何工作的

本文关键字:工作 何工作 ConcurrentQueue | 更新日期: 2023-09-27 18:28:51

它是如何工作的?

我知道,你输入一个类型,然后你可以在另一个线程上接收它,同时也可以获得一个bool

但是我不明白的是,它是如何发送项目的?

例如,在线程1中,我有一个字节数组,我在其中写入一些数据,然后将其放入队列中。

然后线程2将使用TryDequeue(out byte[])来接收它。这是怎么回事?

作为TryDequeue,将不得不将其写入另一个byte[],所以我猜,它正在进行某种复制?

这意味着,如果线程1正在写入的byte[]public,那么线程2可以更快/更好地读取它,因为它不必被复制?

尽管问题是它不知道什么时候可以阅读。

编辑:

下面是我使用它的一个例子:

while (True)
{
    var tempBytes = new byte[length];
    tempBytes.Write(....);
    Queue.Enqueue(tempBytes);
    read = true;
}

While(true)
{
    if (Queue.TryDequeue(out TextureData))
    {
         ................
    }              
});

那么,当线程1生成一个新的tempBytes时,对线程2的引用会是无效的吗?还是一个新的字节数组变成了一个新引用,这意味着它对线程2来说无关紧要?

编辑2:

修复了符合人们愿望的示例代码:)

ConcurrentQueue是如何工作的

作为TryDequeue,将不得不将其写入另一个字节[],所以我猜,它正在进行某种复制?

不,没有。.NET中的所有数组都是引用类型。因此,Queue只存储并返回一个引用。

这也意味着,对数据进行排队的线程应该忘记它。ConcurrentQue不会使数组的内容"线程安全"。

这意味着,如果线程1正在写入的字节[]是公共的,那么线程2可以更快/更好地读取它,因为它不必被复制?

CCD_ 6或CCD_。只要发送代码能够访问数组,它就会工作。