您的位置:首页 > 产品设计 > UI/UE

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

2014-10-22 12:45 429 查看
与多线程并发操作Queue有关!

1)如果你用的是System.Collection.Queue集合,插入队列时
2)如果你用的是System.Collections.Generic.Queue<T>
追问

不知道这里第二段代码中为何需要对于这个object进行lock而不是对q进行lock?


回答

lock(obj){…}后面两个大括号直接的代码称为临界区。当一个线程执行位于代码的临界区时,另一个线程会阻止在临界区外,不会进入该临界区,一直到该lock(obj)锁定的象obj被释放。
第二代码片段中,当然可以这样写
lock(q)
{ }

用q(队列)作为lock的锁定对象。但这样做有个缺点:一旦q被lock锁定,其他对q进行只读操作的线程也无法存取这个q了。
使用了最简单对象object synObj = new object()做为lock锁定对象,这样,在多线程环境中:允许一个线程对队列进行修改;同时允许其他线程读取队列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# 多线程 线程 object
相关文章推荐