多lock的应用实验
进程锁的实验。
动态锁的探索。
public static readonly object obj=new object(); private static readonly List<object> lockidc = new List<object>() { new object(),new object(),new object()}; private static readonly Dictionary<string, object> objdic = new Dictionary<string, object>(); private static readonly object[] objlist = new object[20] ; protected object GetLockObj(string key) { if (objdic.ContainsKey(key)) { return objdic[key]; } else { lock (obj) { if (objdic.ContainsKey(key)) { return objdic[key]; } else { objdic.Add(key, new object()); return objdic[key]; } } } } static PSIDemo() { for (int i = 0; i < objlist.Length; i++) { objlist[i] = new object(); } } private static List<long> orderlist = new List<long>(); private void AddOrder(long orderid) { System.Threading.Thread.Sleep(100); orderlist.Add(orderid); } protected void Page_Load(object sender, EventArgs e) { //object lockobj= System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); for (int i = 0; i < 1000; i++) { int tempid = i%20; //lock (GetLockObj(1.ToString())) lock(objlist[tempid]) { } } stopwatch.Stop(); Response.Write(stopwatch.Elapsed.TotalMilliseconds); Response.Write("<br>"); stopwatch.Reset(); stopwatch.Start(); for (int i = 0; i < 1000; i++) { lock (obj) { } } stopwatch.Stop(); Response.Write(stopwatch.Elapsed.TotalMilliseconds); return; }
浙公网安备 33010602011771号