我正在创建一个处理数千个请求的ASP.net网站,这一切都源于他们共享的一个主要对象来阅读它。我试图绕过这些不同类型的锁。
我对每个问题都有一些常见的问题。
1
public class MyClass
{
lock
{
// DO COOL CODE STUFF.
}
}
2
public class MyClass
{
Application.Lock
// DO COOL CODE STUFF.
Application.Unlock
}
3
public static object lockObject = new object();
public class MyClass
{
lock(lockObject)
{
// DO COOL CODE STUFF.
}
}
4
private static readonly ReaderWriterLockSlim slimLock = new ReaderWriterLockSlim();
public class MyClass
{
slimLock.EnterWriteLock();
// DO COOL CODE STUFF HERE.
slimLock.ExitWriteLock();
}
答案 0 :(得分:2)
阅读所有这些内容的文档:
1)
Application.Lock() and Application.Unlock()
Lock方法阻止其他客户端 从修改存储的变量 应用程序对象citation
2)你不能这样做:
public class MyClass
{
lock
{
// DO COOL CODE STUFF.
}
}
3)如果您可以同时阅读多个客户端,则应使用ReaderWriterLockSlim,但写访问必须具有独占访问权。
4)此代码:
public static object lockObject = new object();
public class MyClass
{
lock(lockObject)
{
// DO COOL CODE STUFF.
}
}
意味着一次只能有一个线程在该块内。意思是序列化读访问。
答案 1 :(得分:1)
锁定单个对象不会很好地扩展。作为替代方案,我建议考虑Object Pool设计模式。它能够越来越多地满足您日益增长的用户需求。