多线程同时访问队列,需要加锁吗? 1.两个线程同时进队需要加锁吗?2.两个线程同时出队需要加锁吗?3.两个线程同时访问队列,一个出队、一个进队,需要加锁吗?另外,好像.net的队列本身就有一个并发同步机制,我不知道是上面的哪一种? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要用 Monitor.Enter,Monitor.Exit 需要加锁用lock就可以了,很简单 是需要加锁的,对于多线程之间共享的变量用LOCK就可以了。尤其是这个队列还是你自己实现的。。 仔细想了一下,还是应该加锁。例如:在一个队列中已经有10个obj.在线程1中加了 obj1,此时队列的内容是obj1 + 之前的10个obj.同时线程2中也加了个obj2,此时队列的内容是obj2 + 之前的10个obj.如果这两个线程同时进行,那么有可能造成obj1或obj2丢失。 两个线程操作同一个队列是需要加锁的,简单点的话使用Lock语句就行。 volatile 说明下队列永远保证数据是最新的一般来讲你这种情况肯定是需要加锁的,线程内运行速度非常快,不可能象我们想象那样简单:这边进队,那边出队,大多数情况出队进程已经将所有数据出队,进队数据还么有来,这样容易造成数据丢失。1 注意线程死锁2 注意队列状态更新 队列的 SyncRoot 属性用来同步访问的,msdn 例子:Queue myCollection = new Queue(); lock(myCollection.SyncRoot) { foreach (Object item in myCollection) { // Insert your code here. } }几乎所有集合类都有这个属性 .NET如何播放*.mp3文件,可以播放*.wav文件 ckeditor3.5.3 图片上传问题 c# 做的页面(不是WEB)能始终在前显示 pda下载FTP文件 数组问题,在线等! 给我一个升级到Vs2005的理由! 那个兄弟有条码打印的控件啊 C# 打印条形码 dll 寻找数据库设计人员有报酬 问个问题 jpg文件处理问题 如何在页面做个定期提醒的功能
用lock就可以了,很简单
例如:在一个队列中已经有10个obj.
在线程1中加了 obj1,此时队列的内容是obj1 + 之前的10个obj.
同时线程2中也加了个obj2,此时队列的内容是obj2 + 之前的10个obj.
如果这两个线程同时进行,那么有可能造成obj1或obj2丢失。
这边进队,那边出队,大多数情况出队进程已经将所有数据出队,进队数据还么有来,这样容易造成数据丢失。1 注意线程死锁
2 注意队列状态更新
msdn 例子:
Queue myCollection = new Queue();
lock(myCollection.SyncRoot) {
foreach (Object item in myCollection) {
// Insert your code here.
}
}
几乎所有集合类都有这个属性