C#多线程怎么锁定全局变量
Dictionary<string,DateTime>dictionary=newDictionary<string,DateTime>();我现在有两个线程,A线程对d...
Dictionary<string,DateTime> dictionary = new Dictionary<string,DateTime>();
我现在有两个线程,A线程对dictionary 执行循环添加操作,B线程对dictionary 执行删除错在。我怎么在B线程开始删除时锁定dictionary ,使A线程不能往dictionary 里面添加数据?
谢谢 展开
我现在有两个线程,A线程对dictionary 执行循环添加操作,B线程对dictionary 执行删除错在。我怎么在B线程开始删除时锁定dictionary ,使A线程不能往dictionary 里面添加数据?
谢谢 展开
4个回答
展开全部
方法还是很多的,例如:
public static Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>();
public static object locker = new object();//添加一个对象作为锁
public static void AddRecord()//线程1循环调用此函数
{
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
}
public static void DeleteRecord()//线程2循环调用此函数
{
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
}
至于线程的调用过程就不写了,你根据实际情况操作吧
public static Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>();
public static object locker = new object();//添加一个对象作为锁
public static void AddRecord()//线程1循环调用此函数
{
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
}
public static void DeleteRecord()//线程2循环调用此函数
{
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
}
至于线程的调用过程就不写了,你根据实际情况操作吧
展开全部
只要加上一下代码就可以了:
public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now); }
lock (locker)//锁
{ /*删除过程*/
dictionary.Remove("...."); }
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只要加上一下代码就可以了:
public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
借鉴设计模式中的单例模式,可以先声明一个无关变量sync,进行操作前
lock(sync)
{
业务逻辑
}
单例模式不是直接锁定实例变量instance,是因为可能还没有生成该实例,你这个应该可以直接锁定dictionary
lock(sync)
{
业务逻辑
}
单例模式不是直接锁定实例变量instance,是因为可能还没有生成该实例,你这个应该可以直接锁定dictionary
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询