C#多线程同步属性操作

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

namespace 多线程
{
    class 线程元子性
    {
        private static Person per = new Person() ;
        
        public static void Main()
        {
            
            for( int i = 0 ; i < 10 ; i ++ )
            {
                new Thread( PersonThread).Start() ;
            }

            Thread.Sleep( 1000 ) ;

            Console.WriteLine( per.Age ) ;

            Console.ReadLine() ;
        }

        public static void  PersonThread()
        {
            for( int i = 0 ; i < 5000 ; i ++ )
            {
                //本来在Age 属性中我们已经使用了LOCK,但是即便如此,也会出现竞态问题
                //原因就是在+=中是先get然后再set,线程仍有可能取到临时值
                //所以,在调用处加lock,然后在get set中去掉
                //lock( per )
                //{
                //  per.Age += 1 ;
                //}
                //当然,我们也可以通过给Person提供一个安全线程的递增方法
                per.IncrementAge() ;
            }

        }

    }

    class Person
    {
        private int _age ;
        private object sync = new object() ;

        public int Age
        {
            get
            {
                //lock( sync )
               // {
                    return this._age ;
               // }
            }

            //set
            //{
            //    //lock( sync )
            //   // {
            //        this._age = value ;
            //   // }
            //}
        }

        public int IncrementAge()
        {
            lock( sync )
            {
                return ++ this._age ;
            }
        }
    }
}

原文:http://blog.csdn.net/aladdinty/article/details/3853470

posted @ 2013-03-14 15:57  Alex.Net  阅读(434)  评论(0编辑  收藏  举报