class Program
{
static void Main(string[] args)
{

//在t1线程中调用LockMe,并将deadlock设为true(将出现死锁)
int i = 10;
while (i > 0)
{
 
Thread t1 = new Thread(LockMe);
t1.Start(true);
Thread.Sleep(1000);
 
Console.WriteLine(string.Format("1.i:{0},开始调用LockMe :{1}",i, System.DateTime.Now));
i = i - 1;
}
 
Console.ReadLine();
}
public static object locker = new object();
public static void LockMe(object o)
{

lock (locker)
{
 Console.WriteLine(string.Format("2. 我是锁定的 :{0}", System.DateTime.Now));
Thread.Sleep(2000);
 
}
}
}

一定要把 锁的对象 public static object locker = new object(); 写在方法外边,

如果按照下面的写法则不起作用
public static void LockMe(object o)
{
 object locker = new object();
lock (locker)
{
 Console.WriteLine(string.Format("2. 我是锁定的 :{0}", System.DateTime.Now));
Thread.Sleep(2000);
 
}
}

============================================

class Program
{
static void Main(string[] args)
{
C1 c1 = new C1();
//在t1线程中调用LockMe,并将deadlock设为true(将出现死锁)
int i = 10;
while (i > 0)
{
Thread t1 = new Thread(c1.LockMe);
 
t1.Start(true);
Thread.Sleep(1000);
 
Console.WriteLine(string.Format("1.i:{0},开始调用LockMe :{1}",i, System.DateTime.Now));
i = i - 1;
}
//在主线程中lock c1
//lock (c1)
//{
// //调用没有被lock的方法
// c1.DoNotLockMe();
// //调用被lock的方法,并试图将deadlock解除
// c1.LockMe(true);
//}
Console.ReadLine();
}
 
}
}

class C1
{
//private bool deadlocked = true;
//private object locker = new object();
////这个方法用到了lock,我们希望lock的代码在同一时刻只能由一个线程访问
//public void LockMe(object o)
//{
// lock (this)
// {
// while (deadlocked)
// {
// deadlocked = (bool)o;
// Console.WriteLine("Foo: 我是锁定的 :(");
// Thread.Sleep(500);
// }
// }
//}
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(string.Format("2. 我是锁定的 :{0}",System.DateTime.Now));
Thread.Sleep(2000);
//}
}
}
//所有线程都可以同时访问的方法
public void DoNotLockMe()
{
Console.WriteLine("我是未被锁定 :)");
}
}

C# 多线程 lock 实例的更多相关文章

  1. (转) C#多线程赛跑实例

    专于:http://blog.csdn.net/lidatgb/article/details/8363035 结合上篇<多线程的基础>,这次我们写一个多线程的赛跑实例,内容很简单:超人和 ...

  2. vc 基于对话框多线程编程实例——线程之间的通信

     vc基于对话框多线程编程实例——线程之间的通信 实例:

  3. C#多线程编程实例 螺纹与窗口交互

    C#多线程编程实例 螺纹与窗口交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = new Thread ...

  4. c# 多线程 创建对象实例

    本次的标题是我在写单例模式的博客时遇到的问题,所以今天专门写了的demo让自己记住怎么简单的使用多线程. 一直纠结的是怎么在for循环中多次实例化对象,好复现单例模式在没有加锁的情况下出现多个实例对象 ...

  5. java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)

    前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...

  6. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  7. 多线程-lock锁

    package 多线程.lock锁; import java.util.concurrent.locks.ReentrantLock; /*. * * //同步代码块 * * */ public cl ...

  8. Java单线程多实例和多线程多实例

    最近写了一个程序,是采用多线程往redis里面写入数据,想统计一下一共写了多少条数据,于是用了一个static的全局变量count来累加,这块代码抽象出来就是这样的: public class Mul ...

  9. C#多线程编程实例 线程与窗体交互

    C#多线程编程实例 线程与窗体交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = ]; public ...

随机推荐

  1. 正则表达式lastIndex属性浅析

    有这样一段代码: var newDateStr = " 11 13:48:18"; var reg = new RegExp("[0-9]+","g& ...

  2. sqlserver 视图能否有变量

    不能,sqlserver 视图一般不能有变量,也不能带存储过程

  3. imx6 framebuffer 分析

    分析imx6 framebuffer设备和驱动的注册过程. Tony Liu, 2016-8-31, Shenzhen 相关文件: arch/arm/mach-mx6/board-mx6q_sabre ...

  4. css中各种居中的奇技淫巧总结

    css中各种居中的奇技淫巧总结   第一种,在固定布局中比较常用的技巧设置container的margin:0 auto:   第二种(从布局中入手)   css .outer{ height:200 ...

  5. 用CocoaPods做iOS程序的依赖管理

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  6. python笔记 - day6

    python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...

  7. 团队冲刺the second day

    今天是我们的团队冲刺的第二天,由于我的电脑出现了一点问题,系统还原了,我有重新配置了一下环境变量和一些eclipse的问题,导致时间浪费了很多,但是我还是做了一些简单的任务,例如编写节日的页面的布局, ...

  8. jqery validate、validate自定义验证方法 + jaery form Demo

    校验规则 required:true  必输字段 remote:"check.php"  使用ajax方法调用check.php验证输入值 email:true  必须输入正确格式 ...

  9. 第六篇 Integration Services:初级工作流管理

    本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...

  10. Hadoop学习笔记: HDFS

    注:该文内容部分来源于ChinaHadoop.cn上的hadoop视频教程. 一. HDFS概述 HDFS即Hadoop Distributed File System, 源于Google发表于200 ...