我发布我对C#锁的理解如下,请帮助我验证我是否正确。C#锁关键字的用法
public class TestLock
{
private object threadLock = new object();
...
public void PrintOne()
{
lock (threadLock)
{
// SectionOne
}
}
public void PrintTwo()
{
lock (threadLock)
{
// SectionTwo
}
}
...
}
案例I>线程1和线程同时试图调用PrintOne。 由于PrintOne由实例锁保护,因此在任何时候,只有一个线程可以专门进入SectionOne。
这是正确的吗?
案例二>线程1和线程同时尝试分别拨打PrintOne和PrintTwo (即线程1调用PrintOne及线程调用PrintTwo) 由于两个打印方法是由同一个实例锁保护,在任何时候, 只有一个线程可以独占访问SectionOne或SectionTwo,但不能同时访问两者。
这是正确的吗?
总结如下答案:代码是线程安全的仅为实例。当实例共享资源时,@oleski有正确答案(=否) – 2011-05-27 22:15:57
因此-1不包含共享数据/资源。请编辑。 – 2011-05-27 22:21:19
这是一个有效的观点,但最初的问题并没有说明这些实例是否是单独的,因此,从编写代码/问题的方式来看,假设他正在讨论针对同一实例进行的调用是安全的。所以,我不同意你的失望,但那是你的代表。 – 2011-05-27 22:43:21