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非常隐秘,没有大量实际编程的程序员根本发现不了这个问题,笔者发现很多老手也没有注意出现此类错误.

  • 相关阅读:
    java8学习笔记之lambda表达式
    spring注解value的用法
    mybites
    spring bean的初始化以及销毁
    java并发之线程间通信
    mybatis常见问题和错误
    hadoop安装问题记录
    linux 常用命令
    省选模拟98 题解
    省选模拟97 题解
  • 原文地址:https://www.cnblogs.com/legahero/p/1250035.html
Copyright © 2011-2022 走看看