lock鎖和monitor.enter鎖

taogchan發表於2013-09-16

Lock(object)鎖的使用

using System;
using System.Threading;

namespace program
{
    class wangjun
    {
        public static string buff = "0";
        public const int ab = 1000000;
        private object mylock = new object();
        static void Main(string[] args)
        {
            wangjun wj = new wangjun();
            Thread th = new Thread(new ThreadStart(wj.xuan1));
            th.Start();
            Thread th2 = new Thread(new ThreadStart(wj.xuan2));
            th2.Start();
            th.Join();
            th2.Join();
            Console.WriteLine("結果是:{0}",buff);
        }
        public void xuan1()
        {
            for (int i = 0; i < ab/2; i++)
            {
                lock (mylock)
                {

                    buff = (long.Parse(buff) + i).ToString();
                }
            }
        }
        public void xuan2()
        {
            for (int i = ab/2; i <= ab; i++)
            {
               
lock (mylock)
                {
                    buff = (long.Parse(buff) + i).ToString();
                }
            }
        }
    }
}

Monitor.enter(object)的使用

using System;
using System.Threading;

namespace program
{
    class wangjun
    {
        public static string buff = "0";
        public const int ab = 1000000;
        private object mylock = new object();
        static void Main(string[] args)
        {
            wangjun wj = new wangjun();
            Thread th = new Thread(new ThreadStart(wj.xuan1));
            th.Start();
            Thread th2 = new Thread(new ThreadStart(wj.xuan2));
            th2.Start();
            th.Join();
            th2.Join();
            Console.WriteLine("結果是:{0}",buff);
        }
        public void xuan1()
        {
            for (int i = 0; i < ab/2; i++)
            {
               
Monitor.Enter(mylock);
                try
                {
                    buff = (long.Parse(buff) + i).ToString();
                }
                finally
                {
                    Monitor.Exit(mylock);
                }

            }
        }
        public void xuan2()
        {
            for (int i = ab/2; i <= ab; i++)
            {
               
Monitor.Enter(mylock);
                try
                {
                    buff = (long.Parse(buff) + i).ToString();
                }
                finally
                {
                    Monitor.Exit(mylock);
                }
            }
        }
    }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-772796/,如需轉載,請註明出處,否則將追究法律責任。

相關文章