Lock锁的问题
多個線程共用一個鎖時,同一時間只有一個可獲得鎖執行,其他線程會阻塞進入隊列,按理解事件如果是多線程的,那么每次事件觸發的含lock的函數都會將進入隊列等待,越排越多。需待實驗證明。
?public class Test
? ? {
? ? ? ?public void Fun1()
? ? ? ?{
? ? ? ? ? ?Task.Factory.StartNew(() => {?
? ? ? ? ? ?
? ? ? ? ? ?while(true)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?Excute("線程1:");
? ? ? ? ? ?}
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?});
? ? ? ?}
? ? ? ?public void Fun2()
? ? ? ?{
? ? ? ? ? ?Task.Factory.StartNew(() =>
? ? ? ? ? ?{
? ? ? ? ? ? ? ?while(true)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Excute("線程2:");
? ? ? ? ? ? ? ?}
? ? ? ? ? ?});
? ? ? ?}
? ? ? ?public void Fun3()
? ? ? ?{
? ? ? ? ? ?Task.Factory.StartNew(() =>
? ? ? ? ? ?{
? ? ? ? ? ? ? ?while (true)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Excute("線程3:");
? ? ? ? ? ? ? ?}
? ? ? ? ? ?});
? ? ? ?}
? ? ? ?object ob = new object();
? ? ? ?int A = 0;
? ? ? ?public void Excute(string id)
? ? ? ?{
? ? ? ? ? ?lock(ob)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?Console.WriteLine(id+A.ToString());
? ? ? ? ? ? ? ?Thread.Sleep(2000);
? ? ? ? ? ? ? ?A++;
? ? ? ? ? ?}
? ? ? ? ??
? ? ? ?}
? ? }
總結
- 上一篇: 解决: Vue 项目本地运行 run 与
- 下一篇: 如何和何时使用 CSS 的权重设置 !i