通過鎖字符串達到控制並發的效果C#
阿新 • • 發佈:2018-04-24
reac tex code args collect pac sta name HR
lock鎖的是地址
而.net有內部機制使得相同的字符串內存地址是相同的(new string)除外
下面上實驗代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp5 { class Program { static void Main(string[] args) { List<string> keyList = new List<string> { "key1","key2", "key1", "key1", "key1", "key1", }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } }public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上鎖2s key="+key); Thread.Sleep(2000); Console.WriteLine("解鎖"); } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp5 { class Program { static void Main(string[] args) { List<string> keyList = new List<string> {new string(‘k‘,1), new string(‘k‘, 1), new string(‘k‘, 1), new string(‘k‘, 1) }; keyList.ForEach(u => { ThreadPool.QueueUserWorkItem(s => { test.lockTestByString(u); }); }); Console.Read(); } } public class test { public static void lockTestByString(string key) { lock (key) { Console.WriteLine("上鎖2s key="+key); Thread.Sleep(2000); Console.WriteLine("解鎖"); } } } }
通過new字符串得出的運行結果
轉自:https://www.cnblogs.com/ProDoctor/p/7619847.html
通過鎖字符串達到控制並發的效果C#