asp.net

lock 关键字在c#中的用法

2019-01-17

lock 对象。主要用于处理并发问题。

目的:解决线程同步访问共享资源的问题
使用大意:lock住一个全局变量,就相当于告诉别的线程,我在使用这个全局变量,请等待。当线程推出lock的作用域时,就释放了对全局变量的锁,其他等待的线程可以访问该资源了。


lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。 
lock 语句以关键字 lock 开头,它有一个作为参数的对象,在该参数的后面还有一个一次只能由一个线程执行的代码块。例如:
C# 代码 
public void Function()
{
    System.Object lockThis = new System.Object();
    lock(lockThis)
    {
        // Access thread-sensitive resources.
    }
}


//定义共享资源

object obj=new object();

//线程函数

void threadFun()

{

   lock(obj)

   {

      //安全的访问资源

   }

}


锁住当前实例:lock(this) 
锁住此类的所有实例:lock(typeof([Type])) 
对字符串的锁,会锁定所有相同内容的字符串,建议可以用静态字符串代替 


假设你做了一个页面,上面一按钮,按了按钮以后做以下处理:
在服务器上打开文本文件,读取其中第一行的数字,+1,再写入,关闭文件。
其实就是个计数器哈。
当点的人特别多的时候,就会有上一个人的文件操作还没完成,下一个人又要打开,就会出现文件共享权限错误。
这时你定义一个static object obj;
lock(obj)
执行文件操作
因obj是static,被锁后其他线程无法访问,就会等待解锁,就不会执行文件操作,也不会出错了。、