Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限

Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限,第1张

概述我在编写多线程的时候使用了System.Collections.Generic.Queue<T>类。 在Queue的Enqueue方法执行时,经常会偶然性的出现(不是每次一开始运行就出现问题,而是达到一定时间后才出现,我称之为经常会偶然性的出现) “源数组长度不足。请检查 srcIndex 和长度以及数组的下限”这种类型的提示语。 我在百度知道上面进行了提问,得到了芝麻的热心帮助: #芝麻开门#Q

我在编写多线程的时候使用了System.Collections.Generic.Queue<T>类。

在Queue的Enqueue方法执行时,经常会偶然性的出现(不是每次一开始运行就出现问题,而是达到一定时间后才出现,我称之为经常会偶然性的出现)

“源数组长度不足。请检查 srcIndex 和长度以及数组的下限”这种类型的提示语。


我在百度知道上面进行了提问,得到了芝麻的热心帮助:

#芝麻开门#Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限。 2014-05-17 23:18 sunruisunrui | 分类:C#/.NET | 浏览13次
Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限。使用的时候包含了多线程,不知道和这有没有关系。
2014-05-17 23:30 提问者采纳

与多线程并发 *** 作Queue有关!

1)如果你用的是System.Collection.Queue集合,插入队列时

1 2 3 4 5 6 System.Collection.Queueq= new System.Collection.Queue(); //锁定队列集合,然后插入 lock (q.SyncRoot) { q.Enqueue(……); }

2)如果你用的是System.Collections.Generic.Queue<T>

1 2 3 4 5 6 object synObj= new (); System.Collections.Generic.Queue< int >q=System.Collections.Generic.Queue< >(); (syncObj) }
追问 今天 00:15
不知道这里第二段代码中为何需要对于这个object进行lock而不是对q进行lock?
回答 今天 01:11
lock(obj){…}后面两个大括号直接的代码称为临界区。当一个线程执行位于代码的临界区时,另一个线程会阻止在临界区外,不会进入该临界区,一直到该lock(obj)锁定的象obj被释放。第二代码片段中,当然可以这样写lock(q){ }用q(队列)作为lock的锁定对象。但这样做有个缺点:一旦q被lock锁定,其他对q进行只读 *** 作的线程也无法存取这个q了。使用了最简单对象object synObj = new object()做为lock锁定对象,这样,在多线程环境中:允许一个线程对队列进行修改;同时允许其他线程读取队列。
提问者评价
谢谢!

这里,他提到了lock,这个我也知道,但是这个锁的使用方法,和这个临界区的概念才是重头戏。

【接下来我会测试这个方法是否管用,并且完善博文】

总结

以上是内存溢出为你收集整理的Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限全部内容,希望文章能够帮你解决Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存