1.为什么用Lock及关键知识

当我们使用线程的时候,效率最高的方式当然是异步,即个个线程同时运行,其间互不依赖和等待。当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被同一个线程操作,以确保每个操作都是有效即时的,也即保证其操作的原子性。lock是C#中最常用的同步方式,格式为lock(objectA){codeB} 。

lock(objectA){codeB}表示意义:

1. objectA被lock了吗?没有则由我来lock,否则一直等待,直至objectA被释放。
2. lock以后在执行codeB的期间其他线程不能调用codeB,也不能使用objectA。
3. 执行完codeB之后释放objectA,并且codeB可以被其他线程访问。

2.Lock(this)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace ConsoleApplication1
{
class C1
{
private bool deadlocked = true;
//这个方法用到了lock,我们希望lock的代码在同一时刻只能由一个线程访问
public void LockMe(object o)
{
lock (this)
{
while (deadlocked)
{
deadlocked = (bool)o;
Console.WriteLine("Foo: I am locked :(");
Thread.Sleep(500);
}
}
}
//所有线程都可以同时访问的方法
public void DoNotLockMe()
{
Console.WriteLine("I am not locked :)");
}
}
class Program
{
static void Main(string[] args)
{
C1 c1 = new C1(); //在t1线程中调用LockMe,并将deadlock设为true(将出现死锁)\
Thread t1 = new Thread(c1.LockMe);
t1.Name = "非主线程";
t1.Start(true);
Thread.Sleep(1000); //在主线程中lock c1
lock (c1)
{
//调用没有被lock的方法
c1.DoNotLockMe();
Console.WriteLine("我是主线程1111111111");
//调用被lock的方法,并试图将deadlock解除
c1.LockMe(true);
Console.WriteLine("我是主线程2222222222");
} }
}
}

aaarticlea/png;base64,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" alt="" />

解释:在t1线程中,会首先执行非主线程,LockMe调用了lock(this),也就是Main函数中的c1,这时候在主线程中调用lock(c1)时,必须要等待t1中的lock块执行完毕之后才能访问c1,但是此时非主线程已经是死锁的状态,即所有c1相关的操作都无法完成,于是我们看到连c1.DoNotLockMe()都没有执行。

3.Lock

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace ConsoleApplication1
{
class C1
{
private bool deadlocked = true;
private object locker = new object();
//这个方法用到了lock,我们希望lock的代码在同一时刻只能由一个线程访问
public void LockMe(object o)
{
lock (locker)
{
while (deadlocked)
{
deadlocked = (bool)o;
Console.WriteLine("Foo: I am locked :(");
Console.WriteLine(Thread.CurrentThread.Name);
Thread.Sleep(500);
}
}
}
//所有线程都可以同时访问的方法
public void DoNotLockMe()
{
Console.WriteLine("I am not locked :)");
} }
class Program
{
static void Main(string[] args)
{
C1 c1 = new C1(); //在t1线程中调用LockMe,并将deadlock设为true(将出现死锁)\
Thread t1 = new Thread(c1.LockMe);
t1.Name = "非主线程";
t1.Start(true);
Thread.Sleep(1000); //在主线程中lock c1
lock (c1)
{
//调用没有被lock的方法
c1.DoNotLockMe();
Console.WriteLine("我是主线程1111111111");
//调用被lock的方法,并试图将deadlock解除
c1.LockMe(true);
Console.WriteLine("我是主线程2222222222");
} }
}
}

aaarticlea/png;base64,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" alt="" />

解释:Thread.Sleep(1000);表示主线程进行的休眠,因此非主线程会先执行。当主线程不休眠时,可能就是aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAkCAIAAACSW+ZAAAADjklEQVR4nO2aWW/TQBDH/f0AIUFbkFAbCohQqnzHfUACISEhtVyBAm2cNMGxHa9vnngIctLd2dnDrt3a/j1U7mSunf/6aFzr/ORt4Eyf7d6xrkIIAY9rgClXc/WucHH6LnBmzx/dbbqRnnqZfnkfupcvHt9rupGeepmPP0TefPjkftON9NSLc/Yx9hdH+w+abqSnXrzfJ2ngHA8eWpZFtmi6ryqpZF3GGaoqbRwO4198SoPl6OnuNda4BowFKFnULEODpYWsJp8zuhwd3ibhy5x59dfVCkQuDxVLs7K/ZtQ1Ex68hBIO9SSE+wu+fH4mUJpfahcd43kU+8SdtdYrYWV/y6hX8owHJ1L8xBPi0wS7Kt9kybq6sVUJVqXwvj1OqXdsdI8nV2EytEB4MAOYB5mDccPSJZTCs8cp9V4PtIWXLrKtwiv6mwnP7B6k/7K49jih3tFgx6xF5LgG4bVmYSC8SohBHmmTvHPFqluWtZyME+oND3a2qxp0KRJDmk06aGQQun0yUaL8oB2MVczDL02LMrFClvb3hHrDg4cV5+254SynPxLqv9zvhe8Y7vQsCXvhu4c3+5mEPn+pZ25vSAb+Dqp4A1a/Q4MWJLz6O2L78Oe/0mj16mBn28g/yFjiaeray/swjfGfMo9UWtuxKwSL8ywOjga7Fvp0yhyAnyratVCvCDaPbJquQ/9cZHFQfHO3Rld4EeqeWnuOXD2b+SqihYiW0EVCZ5LHtPiufo1o+iBlznj1zIS7dKtH4RV1+7/t9v9ESztP6OhwT/F0RE5KvcIyH92KYJMqzSPZ2mffELuzv0k4OtxjwpBfwRrSEYtiDXx4UXVz4uGttLNEmsIrjlURaTamtHRV8gWr+bfVviFyZ3kSgvf4IhIUnujANKTiaYm3BdgPkx8vJx1QW+0b1sLzT/XgcCW59K8HiD+uFhhOtvar+h66UcLUJ3zoXuZJVLyPF8UgiUBJFMH9pdsC9O+FR+wb1sKv38cX3qKZ8sf8RwxY7RJPDHw/hQXvh2/+RglTp/DzPImG3Fe2/K/gZC10T0hR8ecFU+8HMYo2RFvtLKE3z5KIeUlDBFoS7npAUA2kIP6ivvF+RDl1G2s/a+GL17LboxTNHZQZ1IAPVITPr9IPEyXN32lCb5Gn0fb7eOlcRBo3NWiR8D0Ykb/I07j/16vOETh2FlPm4a6n/UxO31DHLv69uqcj/ANuugfhQhinKwAAAABJRU5ErkJggg==" alt="" />先执行了。

这次我们使用一个私有成员作文锁定变量(locker),在LockMe中仅仅锁定这个私有locker,而不是整个对象。这时候重新启动线程,可以看到虽然t1出现了死锁,DoNotLockMe()仍然可以由主线程访问,LockMe()依然不能访问,原因是其中锁定的Locker还没有被t1释放

4.关键点

1. lock(this)的缺点就是在一个线程(例如本例的t1)通过执行该类的某个使用"lock(this)"的方法(例如本例的LockMe())锁定 某对象之后, 导致整个对象无法被其他线程(例如本例的主线程)访问 - 因为很多人在其他线程(例如本例的主线程)中使用该类的时候会使用类似lock(c1)的代码。
2. 锁定的不仅仅是lock段里的代码,锁本身也是线程安全的。
3. 我们应该使用不影响其他操作的私有对象作为locker。
4. 在使用lock的时候,被lock的对象(locker)一定要是引用类型的,如果是值类型,将导致每次lock的时候都会将该对象装箱为一个新的引用对象(事实上如果使用值类型,C#编译器(3.5.30729.1)在编译时就会给出一个错误)。

C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。

C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

设计模式--单例模式之Lock的更多相关文章

  1. 设计模式 单例模式(Singleton) [ 转载 ]

    设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...

  2. c#设计模式-单例模式(面试题)

    c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleto ...

  3. 设计模式 单例模式(Singleton) [ 转载2 ]

    设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...

  4. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

  5. 最简单的设计模式——单例模式的演进和推荐写法(Java 版)

    前言 如下是之前总结的 C++ 版的:软件开发常用设计模式—单例模式总结(c++版),对比发现 Java 实现的单例模式和 C++ 的在线程安全上还是有些区别的. 概念不多说,没意思,我自己总结就是: ...

  6. ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值

    前言 主要讲解了ES6对字符串的拓展,包括includes,startsWith和endsWith,另外增加了字符串模板. Start includes()是否包含 startsWith()以什么开头 ...

  7. Java设计模式の单例模式

    -------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...

  8. java设计模式——单例模式(一)

    一. 定义与类型 定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 二. 适用场景 想确保任何情况下都绝对只用一个实例 三. 优缺点 优点: 在内存里只有一个实例,减少了内存开销 可以 ...

  9. php实现设计模式————单例模式

    php实现设计模式————单例模式 什么是单例模式 为什么要使用单例模式 php中有哪些方式实现新建一个对象实例 如何阻止这种实例化实现理想的单例模式 代码实现 什么是单例模式 为什么要使用单例模式 ...

随机推荐

  1. [Codeforces558E]A Simple Task 线段树

    链接 题意:给定一个长度不超过 \(10^5\) 的字符串(小写英文字母),和不超过5000个操作. 每个操作 L R K 表示给区间[L,R]的字符串排序,K=1为升序,K=0为降序. 最后输出最终 ...

  2. Android学习笔记进阶20 之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  3. cf1089d Distance Sum

    题目大意 给一个有n个点,m条边的无向连通图,求所有点两两之间的最短路.$(2<=n<=10^5;n-1<=m<=n+42)$ solution 我们注意到$m-n+1$很小. ...

  4. sync---强制将被改变的内容立刻写入磁盘

    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率.sync命令则 ...

  5. Date类的用法

    package example; import java.text.DateFormat; import java.text.ParseException; import java.text.Simp ...

  6. BZOJ2806: [Ctsc2012]Cheat(广义后缀自动机,单调队列优化Dp)

    Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的01串,表示N篇作文 Output N行,每行一个整 ...

  7. HTTP浅谈

    HTTP浅谈 1···什么是HTTP? HTTP协议就是超文本传输协议(HyperText Transfer Protocol),通俗理解是浏览器和web服务器传输数据格式的协议,HTTP协议是一个应 ...

  8. KNIMI数据挖掘建模与分析系列_002_利用KNIMI做商超零售关联推荐

    利用KNIMI做商超零售关联推荐 http://blog.csdn.net/shuaihj 一.測试数据 须要測试数据,请留下邮箱 二.训练关联推荐规则 1.读取销售记录(sales.table) 2 ...

  9. 初识ThreadLocal

    近期公司在进行Java开发者的招聘活动,当中有一道面试题是这种:"请简单描写叙述一下ThreadLocal类的作用." 结果发现有非常多的面试者没有听说过ThreadLocal或者 ...

  10. mysql测试spring事务是否生效

    同时对三张表进行插入操作,事务保证完整性.下面进行简单测试: 1. 锁定表 锁定用户表 LOCK TABLES user WRITE; 查看表是否锁定: show ; 显示被锁定的表. 2. 验证在同 ...