【发布时间】:2011-05-27 21:13:58
【问题描述】:
我对C#锁的理解如下,请帮我验证一下是否正确。
public class TestLock
{
private object threadLock = new object();
...
public void PrintOne()
{
lock (threadLock)
{
// SectionOne
}
}
public void PrintTwo()
{
lock (threadLock)
{
// SectionTwo
}
}
...
}
案例 I> Thread1 和 Thread2 同时尝试调用 PrintOne。 由于 PrintOne 受到实例锁的保护,在任何时候,只有 一个线程可以独占进入SectionOne。
这是正确的吗?
案例二> Thread1 和 Thread2 同时尝试调用 PrintOne 和 PrintTwo 分别(即 Thread1 调用 PrintOne 和 Thread2 调用 PrintTwo) 由于两个打印方法都被同一个实例锁保护着,所以在任何时候, 只有一个线程可以独占访问 SectionOne 或 SectionTwo,但不能同时访问两者。
这是正确的吗?
【问题讨论】:
-
总结以下答案:代码仅对每个实例都是线程安全的。当实例共享资源时,@oleski 有正确答案(= 否)
-
因此 -1 表示不包括共享数据/资源。请编辑。
-
这是一个有效的观点,但原始问题并没有说明实例是否是分开的,因此,从编写代码/问题的方式来看,可以安全地假设他在谈论针对同一实例进行的调用。所以,我不同意你的反对意见,但这是你的特权。
-
你不需要在标题中添加标签。这就是标签的用途!
标签: c# multithreading locking