对于ASP.NET本身来讲,是基于IIS应用程序池,有些时候会碰到多用户需要操作同一个全局变量的问题,那么就会有多线程并发访问的问题。在这里仅介绍使用lock来对用户的操作进行加锁保证变量在同一时刻仅仅有一个线程进行访问,从而保证数据一致性。
示例代码如下:
public class BUAPrivilegeService { IAuthorizationService authService = ServiceFactory.Instance().GetAuthorizationService(); List<LPFunction> lpFunctionList = new List<LPFunction>(); private static readonly Object RuntimeConfigLock = new Object(); /// <summary> /// 查询用户可访问的所有菜单集合 /// </summary> /// <param name="userUid">用户帐号</param> /// <param name="应用程序标识Code">appCode</param> /// <returns></returns> public List<LPFunction> QueryAllPrivilege(string userUid,string appCode) { //线程唯一性操作,保证其他线程调用时候获取到的ApplicationCode不会被篡改。 lock (RuntimeConfigLock) { RuntimeConfig.Instance.ApplicationCode = appCode; QueryBUAPrivilegeAllList(userUid,string.Empty); RuntimeConfig.Instance.ApplicationCode = ConstDim.AppCode_Business; } return lpFunctionList; } }
【ASP.NET】多线程操作全局变量时候的处理。,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/BruceGoGo/p/3830483.html