C# 多线程 lock 实例
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 实例的更多相关文章
- (转) C#多线程赛跑实例
专于:http://blog.csdn.net/lidatgb/article/details/8363035 结合上篇<多线程的基础>,这次我们写一个多线程的赛跑实例,内容很简单:超人和 ...
- vc 基于对话框多线程编程实例——线程之间的通信
vc基于对话框多线程编程实例——线程之间的通信 实例:
- C#多线程编程实例 螺纹与窗口交互
C#多线程编程实例 螺纹与窗口交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = new Thread ...
- c# 多线程 创建对象实例
本次的标题是我在写单例模式的博客时遇到的问题,所以今天专门写了的demo让自己记住怎么简单的使用多线程. 一直纠结的是怎么在for循环中多次实例化对象,好复现单例模式在没有加锁的情况下出现多个实例对象 ...
- java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)
前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...
- linux下C语言多线程编程实例
用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...
- 多线程-lock锁
package 多线程.lock锁; import java.util.concurrent.locks.ReentrantLock; /*. * * //同步代码块 * * */ public cl ...
- Java单线程多实例和多线程多实例
最近写了一个程序,是采用多线程往redis里面写入数据,想统计一下一共写了多少条数据,于是用了一个static的全局变量count来累加,这块代码抽象出来就是这样的: public class Mul ...
- C#多线程编程实例 线程与窗体交互
C#多线程编程实例 线程与窗体交互 代码: public partial class Form1 : Form { //声明线程数组 Thread[] workThreads = ]; public ...
随机推荐
- AutoLayout技术选型和应用
前言:这篇文章是笔者在项目中对布局技术进行技术选型和应用的相关介绍,供大家参考. && [self.buttonscount] > 0) { UIButton *button = ...
- Tinyxml的简单应用
参考文章: 1-> http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html 2-> http://blog.csdn ...
- Java 进程(转)
转自http://jiangshuiy.iteye.com/blog/1674235 PS:今天做android助手项目的时候,发现adb push命令执行会卡死,最后发现不能用waitfor阻塞等待 ...
- JS的基础类型与引用类型
两种类型: ECMAScript变量包含两种不同类型的值:基本类型值.引用类型值: 基本类型值:指的是保存在栈内存中的简单数据段: 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际 ...
- JavaScript实现dropdownlist选定值后将选定值的key与value填入两个textbox中
<script language="javascript" type="text/javascript"> var txtText0 = " ...
- iOS企业开发plist安装包实现
第一步: 在使用MACBOOK导出ipa的时候,我们得到ipa的同时,还得到一份plist文件 看到我们导出的plist,需要注意的地方有两个已经用中文标注. 一个是URL,一个是bundle-ide ...
- opencv的高斯混合模型
http://blog.jasonding.top/2015/04/05/Machine%20Learning/%E3%80%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%8 ...
- python中几个常用的算术函数
1.lambda函数(匿名函数) lambda函数使用方式:lambda[参数1,参数2....]:表达式,列表 实例如下: lambda x : x * 2,[1,2,3,4] lambda 2.r ...
- Android Studio IDE 主题设置
1.界面主题设置,如下图: 2.代码字体设置,如下图:
- Java程序员面试失败的5大原因
下面是Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容. #1 说得太少 尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一 ...