2

它是如何工作的?

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

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

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

然后线程 2,将用于TryDequeue(out byte[])接收它。这是如何运作的?

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

意思是,如果byte[]线程 1 正在写入的是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:

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

4

1 回答 1

2

作为 TryDequeue,必须将其写入另一个字节 [],所以我猜,它是在做某种复制吗?

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

这也意味着将数据入队的线程应该忘记它。ConcurrentQuue 不会使数组的内容成为“线程安全的”。

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

public或者private在这里没关系。只要发送代码可以访问数组,它就可以工作。

于 2013-08-22T21:44:00.540 回答