static void fun7() { UnsafeSynchronizer unsafeSynchronizer = new UnsafeSynchronizer(); ConcurrentDictionary <int, UnsafeSynchronizer> nscd = new ConcurrentDictionary <int, UnsafeSynchronizer>(); for (int i = 0; i < 3; i++) { myk mmm = new myk(); mmm.p = i; Thread t = new Thread((mmm) => { var m = mmm as myk; //var w = o as ThreadWorkItem; //if (w == null) return; UnsafeSynchronizer uns = new UnsafeSynchronizer(); nscd.GetOrAdd(m.p, uns); Console.WriteLine("我是线程:" + Thread.CurrentThread.Name + ":群里无聊吗?"); Thread.Sleep(300); uns.acquire(); Console.WriteLine("我是线程:" + Thread.CurrentThread.Name + "退出了群聊"); Thread.Sleep(5000); unsafeSynchronizer.release(); }); t.Name = "Hello,i 'am Thread: " + i; t.Start(mmm); } Thread.Sleep(5000); for (int i = 0; i < 3; i++) { UnsafeSynchronizer un; nscd.TryGetValue(i, out un); un.release(); } unsafeSynchronizer.acquire(); Console.WriteLine("我是线程:" + Thread.CurrentThread.Name + "群主解散了群聊"); //threads[0].Suspend(); }
public void acquire(string id) { UnsafeSynchronizer unsafeSynchronizer = new UnsafeSynchronizer(10000); uscd.GetOrAdd(id, unsafeSynchronizer).acquire(); }