lock锁和monitor.enter锁

来源:互联网 发布:编程培训机构logo 编辑:程序博客网 时间:2024/04/27 19:44

转自:http://blog.sina.com.cn/s/blog_686188ef0100l219.html

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);
                }
            }
        }
    }
}



原创粉丝点击