多线程同时访问队列,需要加锁吗?

fihuang1 2010-04-12 12:32:09
1.两个线程同时进队需要加锁吗?
2.两个线程同时出队需要加锁吗?
3.两个线程同时访问队列,一个出队、一个进队,需要加锁吗?

另外,好像.net的队列本身就有一个并发同步机制,我不知道是上面的哪一种?
...全文
1825 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2010-12-02
  • 打赏
  • 举报
回复
队列的 SyncRoot 属性用来同步访问的,
msdn 例子:
Queue myCollection = new Queue();
lock(myCollection.SyncRoot) {
foreach (Object item in myCollection) {
// Insert your code here.
}
}


几乎所有集合类都有这个属性
裸奔的蜗牛 2010-12-02
  • 打赏
  • 举报
回复
不用怀疑 必须加锁
wjlsmail 2010-11-07
  • 打赏
  • 举报
回复
都需要加锁。
codeingsky 2010-04-13
  • 打赏
  • 举报
回复
volatile 说明下队列永远保证数据是最新的

一般来讲你这种情况肯定是需要加锁的,线程内运行速度非常快,不可能象我们想象那样简单:
这边进队,那边出队,大多数情况出队进程已经将所有数据出队,进队数据还么有来,这样容易造成数据丢失。

1 注意线程死锁
2 注意队列状态更新
blank223 2010-04-13
  • 打赏
  • 举报
回复
需要加锁吧
daviddwly 2010-04-13
  • 打赏
  • 举报
回复
需要,这样比较好
fihuang1 2010-04-13
  • 打赏
  • 举报
回复
众说纷纭
llszn 2010-04-12
  • 打赏
  • 举报
回复
要用 Monitor.Enter,Monitor.Exit
jason_ye 2010-04-12
  • 打赏
  • 举报
回复
两个线程操作同一个队列是需要加锁的,简单点的话使用Lock语句就行。
deknight 2010-04-12
  • 打赏
  • 举报
回复
非常需要
criedshy 2010-04-12
  • 打赏
  • 举报
回复
只要涉及到多线程资源共享的都要加锁
wxhysoftsodc 2010-04-12
  • 打赏
  • 举报
回复
仔细想了一下,还是应该加锁。
例如:在一个队列中已经有10个obj.
在线程1中加了 obj1,此时队列的内容是obj1 + 之前的10个obj.
同时线程2中也加了个obj2,此时队列的内容是obj2 + 之前的10个obj.
如果这两个线程同时进行,那么有可能造成obj1或obj2丢失。
yjl49 2010-04-12
  • 打赏
  • 举报
回复
是需要加锁的,对于多线程之间共享的变量用LOCK就可以了。尤其是这个队列还是你自己实现的。。
Python 2010-04-12
  • 打赏
  • 举报
回复
需要加锁
用lock就可以了,很简单
wxhysoftsodc 2010-04-12
  • 打赏
  • 举报
回复
我的感觉是这样,出队操作的是队首元素,入队操作的是队尾元素。出队和入队操作应该是互不干涉。
当然加锁也不是什么麻烦的事情,可能更安全。
wxhysoftsodc 2010-04-12
  • 打赏
  • 举报
回复
1.两个线程同时进队需要加锁吗?
--不需要
2.两个线程同时出队需要加锁吗?
--不需要
3.两个线程同时访问队列,一个出队、一个进队,需要加锁吗?
--不需要
fihuang1 2010-04-12
  • 打赏
  • 举报
回复
继续顶继续顶继续顶继续顶

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧