我在编写多线程的时候使用了System.Collections.Generic.Queue<T>类。
在Queue的Enqueue方法执行时,经常会偶然性的出现(不是每次一开始运行就出现问题,而是达到一定时间后才出现,我称之为经常会偶然性的出现)
“源数组长度不足。请检查 srcIndex 和长度以及数组的下限”这种类型的提示语。
我在百度知道上面进行了提问,得到了芝麻的热心帮助:
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?
回答
- 提问者评价
-
谢谢!
这里,他提到了lock,这个我也知道,但是这个锁的使用方法,和这个临界区的概念才是重头戏。
【接下来我会测试这个方法是否管用,并且完善博文】
原文链接:https://www.f2er.com/vb/258053.html