Lock的用法,为什么要用?

namespace ThreadTest
{
    class Program
    {
        static bool done;
        static void Main(string[] args)
        {
            new Thread(Go).Start();
            Go();                    
            Console.ReadKey();
        }
        static void Go()
        {
            if (!done)
            {

                done = true;

                Console.WriteLine("Done");

            } 
        } 
     } 
}

 

        static bool done;
        static readonly object locker = new object();
        static void Main(string[] args)
        {
            new Thread(Go).Start();
            Go();                    
            Console.ReadKey();
        }
        static void Go()
        {
            lock(locker)
            {
                if (!done)
                {
                    Console.WriteLine("Done");
                    done = true;
                }
            }
        }

当多个进程分享数据的时候,对某段程序代码要lock(当对分享数据进行改写的时候)。

金沙官网线上,一个进程还没来得及把"done"设置为true的时候,另一个进程可能已经输出了,这就大大的加大了输出两个Done的可能性。

        static void Go()
        {
            if (!done)
            {
                Console.WriteLine("Done");
                done = true;
            }
        }

字段“Done”是两个进程分享的,所以结果输出一个“Done”;但是我们如果把两句程序颠倒一下:

所以,我们需要lock,当给共享变量赋值的时候,可以给程序锁住,这样另一个进程就只能等待,直到lock解除。

 

我们先看些这段代码:

本文由金沙官网线上发布于编程,转载请注明出处:Lock的用法,为什么要用?

您可能还会对下面的文章感兴趣: