0

我试图弄清楚为什么我编写的并行代码错过了我试图并行搜索的某些字符串。

这就是我所拥有的 - StringCollection 是一本字典。键是散列,值是一些字符串。总共有四个要搜索的词典。- InputStrings[] 是一个字符串数组,确切地说是我需要搜索的 10 个。

在我的代码中,我有

Paralle.Foreach(InputStrings,currentString =>
{
  int key = some hashing function on currentString;
  if(SearchCollection(key))// boolean result
   {
     Console.WriteLine("Found:"+key);
   }
   else 
   {
    Console.WriteLine("Not Found:"+key);
  }
});

执行此操作后,我会找到 8 个或 9 个键,并且会丢失一个或两个键。我知道该集合包含我要搜索的所有键。搜索到的键在函数内部进行了修改,以便在某些条件下进行进一步搜索。即 key 被修改并传递给一些子字典进行搜索。

所以我提出的要点是;

这是否意味着线程在完成之前就退出了?我是否需要在我的 SearchCollection 方法或 SearchCollection 方法内加锁?由于我对所有线程使用单个集合,TPL 是否负责锁定,或者它是否会复制我试图搜索的集合本身?

非常感谢任何帮助。谢谢

4

1 回答 1

1

SearchCollection和/或您的哈希代码似乎不是线程安全的。

通常在多个线程中使用只读集合是安全的,但这取决于实现。

您没有提供足够的详细信息来进一步分析。

于 2011-12-30T10:52:13.733 回答