多线程问题请教
class CheckData : ParentClass
{
public void DoCheck()
{
while (true)
{
if (!Interlocked.Equals(isStop, 0))
break;
KeyValuePair<int, List<TestModule>> kvp = GetDequeue();
if (kvp.Value != null)
{
Console.WriteLine(string.Format("实体数量:{0},当前线程ID:{1}",kvp.Value.Count,Thread.CurrentThread.ManagedThreadId));
foreach(var item in kvp.Value)
Console.WriteLine(item.B);
Console.WriteLine("==============================");
// 具体的逻辑实现 ......
}
}
}
public KeyValuePair<int, List<TestModule>> GetDequeue()
{
KeyValuePair<int, List<TestModule>> kvp = new KeyValuePair<int, List<TestModule>>();
lock (queue)
if (queue.Count > 0)
return queue.Dequeue();
return kvp;
}
}
上面的方法 DoCheck() 方法我开了4个线程在跑,这样子是没有问题的吧,不需要加 Lock 吧。
queue 是一个全局的变量,我加 Lock了。这个方法体内不需要再 lock 什么了吧。
拜谢!