我遇到了(我希望)锁死问题与WCF服务,我试着写。线程和访问共享目录
我有一个功能,“定位”的下列锁定特定项目即时通讯清单:通过这个列表
CIPRecipe FindRecipe_ByUniqueID(string uniqueID)
{
lock (_locks[LOCK_RECIPES])
{
foreach (var r in _recipes.Keys)
{
if (_recipes[r].UniqueID == uniqueID)
{
return _recipes[r];
}
}
}
return null;
}
然而,各种功能重申,总是采用同样的LOCK例如....
lock (_locks[LOCK_RECIPES_NO_ADD_OR_REMOVE])
{
foreach (var r in _recipes)
{
r.Value.UpdateSummary();
summaries.Add((RecipeSummary)r.Value.Summary);
}
}
我怀疑是,在上面的例子中_recipes项目已突然叫一个函数,它最终调用的第一个功能 - “CIPRecipe FindRecipe_ByUniqueID(字符串UNIQUEID)”,这是导致死锁到达时在迭代中。
我需要停止这个名单不断变化的,而我是通过迭代它。有人能告诉我最佳做法吗?
感谢
你应该看看到'ReaderWriterLockSlim' –
谢谢,请升级到回答您的评论,我会接受它。 不知道为什么这个问题收到downvote虽然... –