zoukankan      html  css  js  c++  java
  • Lock的用法,为什么要用?

    当多个进程分享数据的时候,对某段程序代码要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");
                } 
    }
    }
    }

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

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

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

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

            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;
                    }
                }
            }
  • 相关阅读:
    Android实现监测网络状态
    安卓开源库之动画篇
    安卓向服务器发送List数据
    Material Design综合实例
    Material Design入门(三)
    Android之Fragment(二)
    Android之Fragment(一)
    Material Design入门(二)
    Material Design入门
    Android之ActionBar
  • 原文地址:https://www.cnblogs.com/xiao9426926/p/5983726.html
Copyright © 2011-2022 走看看