zoukankan      html  css  js  c++  java
  • 关键字Lock的简单小例子

            一、什么是Lock?

      Lock——字面上理解就是锁上;锁住;把……锁起来的意思;

      为什么要锁?要锁干什么?——回到现实中可想象到,这个卫生间我要上,其他人不要进来!(所以我要锁住门);又或者土味情话所言,我要把你锁在我的心里,然后在里面加个无限循环语句,不给你出来,也不被别人所得,你只能是我的,哈哈哈哈....

      上面的简单想象,可以得到,我们之所以要锁,就是因为我们想独占某个资源(厕所and你的心爱人),或者在需要共用同一个资源的时候(更多的表现在多线程方面)。多线程可以简单的理解为,一个线程看作是一个人,多线程就是多个人在干活,每个人干每个人的事,互不干扰,如果你的代码中出现类似(厕所这样的公共资源),你就得加个锁拉!不然多个人上同一个厕所,那画面得.............咳咳咳~总之轻则数据异常,重则软件崩溃。

      Lock关键字主要是实现多线程同步

      二、下面提供几个简单的小例子:
        下面的例子是根据自身能力给的例子,如有不妥之处,还请各位多多指导!

      1、新建一个Window窗体应用程序——略~

      2、添加一个锁

              private static object o = new object();

      3、添加三个按钮button
        (1)线程1按钮以及线程方法

          按钮1是实现开启线程1;

          

          线程方法:

         this.Invoke()是一种托管方法——解决跨线程问题~      

        (2)线程2按钮
         同理
              

           (3)同时执行两个线程的按钮

          

        4、加锁和没加锁区别

        (1)加锁效果

      

         (2)不加锁

        去掉lock{}部分

       线程1和2同时写入了1,数据冲突
       5、使用总结:

         建锁对象——private static object o = new object();

        锁住该锁的地方——lock{};
        

      

  • 相关阅读:
    setjmp和longjmp函数使用详解
    一文搞懂HMM(隐马尔可夫模型)
    Qt多工程多目录的编译案例
    HTML中Id和Name的区别
    字符识别中的图像归一化算法
    QT工程pro设置实践(with QtCreator)----非弄的像VS一样才顺手?
    暗通道优先的图像去雾算法
    callback用法简介
    ansible 批量部署准备工作
    MySQL高级管理
  • 原文地址:https://www.cnblogs.com/mtxcat/p/12755639.html
Copyright © 2011-2022 走看看