91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程----Monitor(互斥鎖)類設置超時值

發布時間:2020-07-25 17:11:33 來源:網絡 閱讀:1884 作者:1473348968 欄目:編程語言

Monitor類與Lock語句相比,Monitor類的主要優點是:可以添加一個等待被鎖定的超時值。

缺點:開銷非常大

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            ShareClass sc = new ShareClass();
            Job j=new Job (sc);
            Task[] ts=new  Task[20];
            for (int i = 0; i < 20; i++)
            {
                ts[i] = new Task(j.TheDoJob2);
                ts[i].Start();
            }
            for (int i = 0; i < 20; i++)
            {
                ts[i].Wait();
            }
            Console.WriteLine(sc.state);
            Console.ReadKey();
        }
     
    }
    class ShareClass
    {
        public int state { get; set; }
    }
    class Job
    {
        ShareClass sc { get; set; }
        private object obj = new object();
        public Job(ShareClass s)
        {
            sc = s;
        }
        //==========普通的Monitor類
        public void TheDoJob()
        {
            //鎖定
            Monitor.Enter(obj);
            try
            {
                for (int i = 0; i < 10000; i++)
                {
                    sc.state++;
                }
            }
            catch { }
            finally
            {
                //如果拋出異常也會就出鎖
                //釋放鎖
                Monitor.Exit(obj); 
            }
        }
 
        //===========給Monitor類設置超時時間
        public void TheDoJob2()
        {
            bool yesno=false;
            //鎖定
            Monitor.TryEnter(obj, 100, ref yesno);
            if (yesno)
            {
                for (int i = 0; i < 10000; i++)
                {
                    sc.state++;
                }
                Console.WriteLine("yes");
                //釋放鎖
                Monitor.Exit(obj);
            }
            else
            {
                //如果超時會執行下面代碼
                Console.WriteLine("no");
            }
        }
    }
}

 

 TheDoJob()

線程----Monitor(互斥鎖)類設置超時值

 

 

 TheDoJob2()

 

 線程----Monitor(互斥鎖)類設置超時值

 

 =================================SpinLock(自旋鎖)

        如果基于對象的的鎖定對象(Monitor)的系統開銷由于垃圾回收而過高,就可以使用SpinLock結構。如果有大量的鎖定,且鎖定的時間是非常短,自旋鎖就很有用。

 

*注意:

        傳送SpinLock實例時要小心。因為SpinLock定義為結構,把一個變量賦予另一個變量會創建副本。總是通過引用傳送SpinLock實例。

 

例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            ShareClass sc = new ShareClass();
            Job j = new Job(sc);
            int sum = 20;
            Task[] t = new Task[sum];
            //開啟20個任務
            for (int i = 0; i < sum; i++)
            {
                t[i] = new Task(j.JobStart);
                t[i].Start();
            }
            //等待20個任務全部結束
            for (int i = 0; i < sum; i++)
            {
                t[i].Wait();
            }
            Console.WriteLine(sc.State);
            Console.ReadKey();
        }
    }
    //共享類
    class ShareClass
    {
        public int State { get; set; }
    }

    class Job
    {
        //聲明一個自旋鎖,自旋鎖是一個結構(不能為屬性)
        private SpinLock sl;
        //共享類
        private ShareClass sc;
        public Job(ShareClass _sc)
        {
            this.sc = _sc;
            this.sl = new SpinLock();
        }
        public void JobStart()
        {
            //并行循環
            Parallel.For(0, 10000, i =>
            {
                bool spinToken = false;
                sl.Enter(ref spinToken);//鎖定
                try
                {
                    sc.State++;
                }
                finally
                {
                    if (spinToken)
                        sl.Exit();//釋放鎖
                }
            });
        }
    }
}

 線程----Monitor(互斥鎖)類設置超時值

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蕲春县| 水城县| 余江县| 施秉县| 建湖县| 枣强县| 西城区| 乐业县| 颍上县| 阿拉善右旗| 略阳县| 宁陵县| 沧州市| 会同县| 承德市| 高唐县| 尖扎县| 五河县| 普安县| 湾仔区| 黎城县| 乌拉特前旗| 清镇市| 商洛市| 治多县| 包头市| 宁夏| 明溪县| 石柱| 贵州省| 平南县| 丹江口市| 汝城县| 太康县| 乌拉特中旗| 巩义市| 元氏县| 永仁县| 苏州市| 温宿县| 涟水县|