真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

線程----Monitor(互斥鎖)類(lèi)設(shè)置超時(shí)值

Monitor類(lèi)與Lock語(yǔ)句相比,Monitor類(lèi)的主要優(yōu)點(diǎn)是:可以添加一個(gè)等待被鎖定的超時(shí)值。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),同仁企業(yè)網(wǎng)站建設(shè),同仁品牌網(wǎng)站建設(shè),網(wǎng)站定制,同仁網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,同仁網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

缺點(diǎn):開(kāi)銷(xiāo)非常大

 

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類(lèi)
        public void TheDoJob()
        {
            //鎖定
            Monitor.Enter(obj);
            try
            {
                for (int i = 0; i < 10000; i++)
                {
                    sc.state++;
                }
            }
            catch { }
            finally
            {
                //如果拋出異常也會(huì)就出鎖
                //釋放鎖
                Monitor.Exit(obj); 
            }
        }
 
        //===========給Monitor類(lèi)設(shè)置超時(shí)時(shí)間
        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
            {
                //如果超時(shí)會(huì)執(zhí)行下面代碼
                Console.WriteLine("no");
            }
        }
    }
}

 

 TheDoJob()

線程----Monitor(互斥鎖)類(lèi)設(shè)置超時(shí)值

 

 

 TheDoJob2()

 

 線程----Monitor(互斥鎖)類(lèi)設(shè)置超時(shí)值

 

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

        如果基于對(duì)象的的鎖定對(duì)象(Monitor)的系統(tǒng)開(kāi)銷(xiāo)由于垃圾回收而過(guò)高,就可以使用SpinLock結(jié)構(gòu)。如果有大量的鎖定,且鎖定的時(shí)間是非常短,自旋鎖就很有用。

 

*注意:

        傳送SpinLock實(shí)例時(shí)要小心。因?yàn)镾pinLock定義為結(jié)構(gòu),把一個(gè)變量賦予另一個(gè)變量會(huì)創(chuàng)建副本??偸峭ㄟ^(guò)引用傳送SpinLock實(shí)例。

 

例子:

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];
            //開(kāi)啟20個(gè)任務(wù)
            for (int i = 0; i < sum; i++)
            {
                t[i] = new Task(j.JobStart);
                t[i].Start();
            }
            //等待20個(gè)任務(wù)全部結(jié)束
            for (int i = 0; i < sum; i++)
            {
                t[i].Wait();
            }
            Console.WriteLine(sc.State);
            Console.ReadKey();
        }
    }
    //共享類(lèi)
    class ShareClass
    {
        public int State { get; set; }
    }

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

 線程----Monitor(互斥鎖)類(lèi)設(shè)置超時(shí)值


當(dāng)前名稱(chēng):線程----Monitor(互斥鎖)類(lèi)設(shè)置超時(shí)值
分享路徑:http://weahome.cn/article/igschs.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部