zoukankan      html  css  js  c++  java
  • 多线程系列(4)使用多线程的安全问题

      在使用多线程的时候,往往存在一定的公共数据,为了避免多个线程同时操作同一数据,我们需要为线程加锁。

    加锁的原理:

    每一个引用类型的对象都有一个同步索引块,指示当前使用该对象的线程数,每个线程执行到Lock语句块的时候就会判断当前锁定项(这里是this,当前窗体对象)的同步索引块是否等于0(即没有线程在访问该变量),如果等于0则进入执行块,首先将同步索引块的索引加1,表示当前多了一个线程使用this,等lock块执行完成再将同步索引块中的索引值减1,使得其它线程能够继续访问,这样就相当于实现了一个排队机制,使得在适当的时候该串行执行的代码串行执行。

    我们可以利用lock语句为线程加锁。示例代码如下:

    需要锁定对象:lock(this)

    需要锁定代码段:Object obj = new Object(); lock(obj){…}

    我们还可以利用lock语句的语法糖Monitor来实现,示例代码如下:

    class Control
    {
          private object obj=new object();
     
          public void Method()
          {
                Monitor.Enter(obj);
                try
                {......}
                catch(Excetion ex)
                {......}
                finally
                {
                    Monitor.Exit(obj);
                }
          }
    }

    至此,这个初级的多线程入门系列完成了。后面随着对多线程认识的加深,我们再来进行补充。

  • 相关阅读:
    c语言数据处理!
    指针的概念
    return的用处
    用java写随机出题
    java 新手
    分支程序设计。
    不同车型 不同起步价不同费用的问题(switch语句)
    这两天做了很多随机函数的用法(下面是一个出题实验)。
    yum 命令讲解
    日常工作中一些常用命令
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3797035.html
Copyright © 2011-2022 走看看