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:
修复了符合人们愿望的示例代码:)
作为TryDequeue,将不得不将其写入另一个字节[],所以我猜,它正在进行某种复制?
不,没有。.NET中的所有数组都是引用类型。因此,Queue只存储并返回一个引用。
这也意味着,对数据进行排队的线程应该忘记它。ConcurrentQue不会使数组的内容"线程安全"。
这意味着,如果线程1正在写入的字节[]是公共的,那么线程2可以更快/更好地读取它,因为它不必被复制?
CCD_ 6或CCD_。只要发送代码能够访问数组,它就会工作。