C# lock关键字
2012-01-20 15:26
246 查看
lock 简单的说是在一个线程进入代码段的时候防止其他的线程进入,语法如下:
lock(expression)
{
代码段;
}
这个很简单了,像lock(this), lock(obj) 我们都很常见.
问题来了,Lock后面括号里的内容是什么?他跟要被锁定的代码段有什么关系?
归纳的说是:lock 锁住了一个代码段, expression 表示的是代码段是谁的 。
不要咬文嚼字,所谓代码段是谁的其实没有太多的实际意义,可以直接翻译成:
当2个线程的代码执行到此处,如果2个线程的 expression指向同一个引用,就能锁住,否则锁不住.
假设我们是这样调用的 :
下面这样lock就锁不住,因为 o 指向不同的引用:
下面这样调用就能锁住:
lock(expression)
{
代码段;
}
这个很简单了,像lock(this), lock(obj) 我们都很常见.
问题来了,Lock后面括号里的内容是什么?他跟要被锁定的代码段有什么关系?
归纳的说是:lock 锁住了一个代码段, expression 表示的是代码段是谁的 。
不要咬文嚼字,所谓代码段是谁的其实没有太多的实际意义,可以直接翻译成:
当2个线程的代码执行到此处,如果2个线程的 expression指向同一个引用,就能锁住,否则锁不住.
假设我们是这样调用的 :
protected void Page_Load(object sender, EventArgs e) { Class1 c = new Class1(); Thread t = new Thread( c.f); Thread t1 = new Thread(c.f); t.Start(); t1.Start(); }
下面这样lock就锁不住,因为 o 指向不同的引用:
public class Class1 { public void f() { object o = new object(); lock(o) { for (int k = 0; k < 1000; ) { k++; } } } }
下面这样调用就能锁住:
public class Class1 { object o = new object(); public void f() { lock(o) { for (int k = 0; k < 1000; ) { k++; } } } }
相关文章推荐
- C#中的lock关键字
- C# lock关键字叙述
- C# Lock关键字
- C#中怎么使用lock关键字
- C# Lock关键字
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- 描述C#多线程中 lock关键字
- C#中的lock关键字(初识)
- C#中的lock关键字
- C#中lock关键字的用法
- C#中的lock关键字
- C#中的lock关键字有何用!
- C# 使用lock关键字lock不同的对象
- C# 中 lock 关键字的实现
- C#中的 lock 关键字 【msdn】
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- C# lock关键字 同步代码块
- NET面试题:C#中的lock关键字有何作用
- 描述C#多线程中 lock关键字
- (转载)C#中的lock关键字