您的位置:首页 > 编程语言 > C#

C# lock关键字

2012-01-20 15:26 246 查看
lock 简单的说是在一个线程进入代码段的时候防止其他的线程进入,语法如下:

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++;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: