2010-02-07 44 views
4

我必須搜索一個進程表,它由在給定的一組IP地址上運行的進程的名稱填充。 目前我在C++中使用多進程映射,進程名稱作爲鍵值和IP地址。 有沒有其他有效的數據結構可以完成相同的任務。 也可以通過使用pthreads獲得任何類型的並行性?如果有的話,任何人都可以將我指向正確的方向什麼類型的數據結構可以有效地搜索進程表

回答

1

您不需要並行訪問數千個條目的RAM中的數據結構。你可以鎖定它(確保當時只有一個進程/線程訪問它),並確保訪問足夠了。 Multimap沒問題。哈希映射雖然會更好。

1

什麼是您的表的典型查詢?

嘗試使用散列表,它可以更快的大表。

如何存儲名稱和IP? UTF,字符串,char *?葉作爲uint32或字符串?

對於具有大量讀取查詢的只讀結構,您可以從多個線程中受益。

UPD:使用std::unordered_multimap#include <tr1/unordered_map>

+0

名字存儲爲字符串 – gunjit 2010-02-07 04:50:14

+0

和典型查詢發現是某個進程正在運行或不..如果運行報告IP地址 – gunjit 2010-02-07 04:50:51

+0

使用EXT /的hash_map文件和類__gnu_cxx :: hash_multimap在GCC 4.1和更早 – osgx 2010-02-07 05:11:04

0

根據表的大小,你會發現一個哈希表比multimap容器(與二叉樹實現)更有效。

hash_multimap數據結構實現了散列表STL容器,並且可能對您有用。

+0

是散列表可用在GNU編譯器或Linux下? – gunjit 2010-02-07 04:58:49

+0

它的C++ stdlib,這意味着它可以在標準C++庫所在的地方使用。這實際上意味着所有符合C++標準的編譯器。 – batbrat 2010-02-07 05:17:03

+0

散列圖不是C++的標準(在1998和2003版本中)。它們將被包含在下一個C++標準C++ 0x中。 GCC在它的libstdC++類名unordered_multimap中有一個pre-standard tr1的實現。還有非標準的ext變量:'hash_multimap' – osgx 2010-02-07 05:32:02

相關問題