它是如何运作的?
我知道,你输入一个类型,然后你可以在另一个线程上接收它,同时也得到一个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:
修复了符合人们意愿的示例代码:)
答案 0 :(得分:2)
作为TryDequeue,将不得不将其写入另一个字节[],所以我猜,它正在进行某种复制?
不,不。 .NET中的所有数组都是引用类型。所以Queue只存储并返回一个引用。
这也意味着排队数据的线程应该忘记它。 ConcurrentQuue不会使数组的内容成为“线程安全的”。
意思是,如果线程1写入的字节[]是公共的,则线程2可以更快/更好地读取它,因为它不必被复制?
public
或private
在此无关紧要。只要发送代码可以访问数组,它就可以工作。