线程同步的小例子(两个线程对一个List进行写操作)

来源:互联网 发布:淘宝怎么一键发布宝贝 编辑:程序博客网 时间:2024/05/20 07:16

这个只是一个并发操作,还未实现真正的同步,如同在经过同一个地点时,一个是从高架上走的,一个是从路面走的

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;



namespace ThreadSynchronization
{

    class Program
    {
        static Thread t1 = new Thread(write1);
        static Thread t2 = new Thread(write2);

        static List<int> list = new List<int>();
        private static void write1()
        {
            Monitor.Enter(list);                             //使用Monitor时,最后要手动释放list
            try
            {
                //lock (list)                                         //lock在执行完后会自动释放掉
                //{
                for (int i = 0; i < 10; i++)
                {
                    list.Add(i);
                }
                foreach (int i in list)
                {
                    Console.WriteLine("ThreadOne:{0}", i);
                    Thread.Sleep(100);
                }
            }
            finally
            {
                Monitor.Exit(list);
            }
            //}
        }

        private static void write2()
        {
            Monitor.Enter(list);
            try
            {
                //lock (list)
                //{
                for (int i = 20; i < 30; i++)
                {
                    list.Add(i);
                }
                foreach (int i in list)
                {
                    Console.WriteLine("ThreadTwo:{0}", i);
                    Thread.Sleep(100);
                }
            }
            finally
            {
                Monitor.Exit(list);
            }

            //}
        }

        static void Main(string[] args)
        {
            t1.Start();
            t2.Start();

            Console.ReadLine();

        }
    }
}



还有一个[Synchronization]:

要先引用Using System.Runtime.Remoting.Contexts;

然后要让该类继承自ContextBoundObject类,还要在该类前写上[Synchronization]

这个方法试了下,但是没看到效果,暂时还没发现自己的问题出在哪儿……

原创粉丝点击