c# 多线程访问 dictionary
线程1先访问到Dictionarylock(dictionary){foreach(stringkeyindictionary.keys){if(key.split('|...
线程1先访问到Dictionary
lock(dictionary)
{
foreach(string key in dictionary.keys)
{
if(key.split('|')[0]="xx")
{
aa=key.split('|')[1];
......
}
}
可能正在FOREACH操作的时候,线程2操作
lock(dictionary)
{
if(dictionary[xx]="aa")
dictionary.remove(xx);
}
此时操作的是同一项dictionary[xx],然后线程一就报错,线程了删除了key.split('|')[1]部分,保留了key.split('|')[0]部分,这个怎么解决? 展开
lock(dictionary)
{
foreach(string key in dictionary.keys)
{
if(key.split('|')[0]="xx")
{
aa=key.split('|')[1];
......
}
}
可能正在FOREACH操作的时候,线程2操作
lock(dictionary)
{
if(dictionary[xx]="aa")
dictionary.remove(xx);
}
此时操作的是同一项dictionary[xx],然后线程一就报错,线程了删除了key.split('|')[1]部分,保留了key.split('|')[0]部分,这个怎么解决? 展开
2个回答
2015-02-14
展开全部
其实这个结果已经很明显了
最后字典中项目数不是1w,说明中间多线程同时访问的时候字典内部状态被破坏
至于破坏到哪种程度,这个就说不清楚了,除非大量测试或者研究源码。
有可能仅仅是某些项目被漏掉了;也有可能整个dictionary都已经处于一种损坏状态,所有后续操作都不可靠。
最后字典中项目数不是1w,说明中间多线程同时访问的时候字典内部状态被破坏
至于破坏到哪种程度,这个就说不清楚了,除非大量测试或者研究源码。
有可能仅仅是某些项目被漏掉了;也有可能整个dictionary都已经处于一种损坏状态,所有后续操作都不可靠。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询