【发布时间】:2012-03-26 03:49:02
【问题描述】:
这是来自 MSDN: lock 关键字确保一个线程不会进入临界区代码,而另一个线程却在临界区。
临界区是否必须与临界区相同?
或者它的意思是: lock 关键字可确保一个线程不会进入任何由代码对象保护的临界区,而另一个线程不会进入由同一对象保护的任何临界区。 ?
class Program
{
static void Main(string[] args)
{
TestDifferentCriticalSections();
Console.ReadLine();
}
private static void TestDifferentCriticalSections()
{
Test lo = new Test();
Thread t1 = new Thread(() =>
{
lo.MethodA();
});
t1.Start();
Thread t2 = new Thread(() =>
{
lo.MethodB();
});
t2.Start();
}
}
public class Test
{
private object obj = new object();
public Test()
{ }
public void MethodA()
{
lock (obj)
{
for (int i = 0; i < 5; i++)
{
Thread.Sleep(500);
Console.WriteLine("A");
}
}
}
public void MethodB()
{
lock (obj)
{
for (int i = 0; i < 5; i++)
{
Thread.Sleep(500);
Console.WriteLine("B");
}
}
}
}
【问题讨论】:
-
The 更多地是关于语法而不是 C#,“the”是确定的,而“a”是不确定的,可以指代任何代码部分。 englishclub.com/grammar/adjectives-determiners-the-a-an.htm
标签: c# multithreading locking block critical-section