首页 技术交流 C#中Lock锁的用法简析,lock锁的简单原理剖析 正文

C#中Lock锁的用法简析,lock锁的简单原理剖析

发布日期:2019年03月04日 13:35        阅读次数:926

在多线程编程过程中,多个线程同时操作同一个对象或者同时访问同一段代码时,为了避免同一时刻多个线程同时抢占这个对象或者资源造成脏读或者造成系统逻辑重复执行,这就需要用到了lock锁,lock锁定后,同一时刻只能有一个线程去访问资源,直到该线程释放该资源为止,在该线程释放之前,其他线程只能等待。

lock(obj) {code}的一般执行顺序:

1.线程1进来执行,判定obj是否锁定,若锁定则等待资源释放,如果没有则锁定obj,执行code,线程2,3,n+1只能排队等待

2.线程1执行完code,跳出lock,此时obj被释放,其他线程可以继续第1步的操作进行访问


在实际编程过程中,我们可能会锁定一个静态变量,也可能会锁定一个私有成员,还可以锁定类本身lock(this),下面我们一一进行剖析:

一、锁定私有成员

锁定一个类的私有成员时,在实例化改类时,其实锁的范围是只作用于该实例化对象的,如果你再实例化一个类,就不会有任何影响:

二、锁定静态变量

锁定静态变量时,其实作用的是该静态变量的作用域,只要该静态变量被锁了,其他线程都无法访问该静态变量资源

三、锁定this

锁定this相当于锁定了由改类创建的对象,执行了lock(this)后该对象的所有方法和属性都无法进行访问。

评论:

共 0 页 0 条记录,当前为第 1 页