zoukankan      html  css  js  c++  java
  • 使用lock的常见错误

    在C#程序中,为保证某段代码阻塞执行,如下:

    func()

    {

          lock(this)

         {

             //代码1....

             //代码2....

         }

    }

    当代码中发生异常的,如:

    func()

    {

          lock(this)

         {

             //代码1....

             //发生异常,将直接退出函数不执行后面的代码

            //代码2....

         }//实际这里隐含UnLock

    }

    这个时候,将导致lock发生混乱,下次代码执行到该处的时候,可能与预期不同.

    安全的lock用法是在lock内增加try catch,保证隐含UnLock的执行,如下:

    func()

    {

          lock(this)

         {

             try

            {

                //代码1....

               //发生异常,将直接退出函数不执行后面的代码

               //代码2....

            }catch

            {

             }

         }//实际这里隐含UnLock

    }

    同理,其他的各种lock也应该相同处理,才能保证代码的正确执行.这个Bug非常隐秘,没有大量实际编程的程序员根本发现不了这个问题,笔者发现很多老手也没有注意出现此类错误.

  • 相关阅读:
    sql round
    COJ1086 分组01背包
    POJ3624 (01背包)
    COJ1271 Brackets Sequence
    nacoskubernet集群安装(离线安装)
    docker离线安装及本地yum配置
    rediskubernet集群离线安装
    mysql修改密码
    harbor离线安装
    ansibletidb3.0安装(离线版)
  • 原文地址:https://www.cnblogs.com/legahero/p/1250035.html
Copyright © 2011-2022 走看看