说我有一个static Dictionary
和想要做的事,如下列事项,除了我只是想锁定我目前处理的,而不是整个字典中的特定字典词条:锁定单个字典条目而不是整个字典?<string, object
>
lock(myDictionary)
{
if(myDictionary["myKey"] == null)
{
myDictionary["myKey"] = new MyClass();
}
}
这是可能没有写我自己的字典实现?
感谢,
谢谢你,我不知道这件事。我实际上正在尝试更新ASP.NET应用程序以使线程安全地使用会话状态,并希望有一种方法可以仅锁定部分Session对象而不是整个事物。看起来我必须编写自己的SessionState实现。 – 2011-04-19 23:17:08
@nw从并发的角度来看,你确定ASP.NET会话状态真的是个问题吗?首先阅读http://msdn.microsoft.com/en-us/library/ms178581.aspx底部的“并发请求和会话状态”段落。 – 2011-04-20 06:59:20
我试图解决的主要问题是来自同一会话的请求排队,所以服务器在取消ajax请求后长时间阻塞。当我开始这个线程时,我想会有办法将这个排队关闭,并且我可以自己管理并发,但显然这很难或不可能。会话状态仅用于为每个会话存储一个缓存对象。现在我正在考虑最简单的解决方案就是在将Session ID映射到缓存对象的应用程序状态中放置一个ConcurrentDictionary。你怎么看? – 2011-04-20 19:19:43