2013-03-01 69 views
1

如果您確切知道無序映射將包含的最大元素數量,並且您預先分配了確切數量的存儲桶。預分配的線程安全unordered_map

該容器上的線程安全操作(不是存儲在容器中的對象)是什麼操作?

+2

通常STL容器對於多個閱讀器是安全的,但不是多個作者。 – 2013-03-01 04:39:51

+0

我認爲(幾乎)所有讀取同時沒有寫入相同的讀取位置是安全的,就像其他容器一樣。 – 2013-03-01 04:40:25

+0

因此,預分配存儲區不會提供額外的線程安全級別? (我期待這可能是答案,但希望不是..) – goji 2013-03-01 04:44:52

回答

0

從你的問題看來,你似乎並沒有完全理解哈希映射aka unordered_map是如何工作的。你可以閱讀this article on wiki以更好地理解它。所以如果你的意思不是 你有minimal perfect hash function那麼設置桶的數量和元素的預期數量完全一樣會讓事情變得更糟。如果你希望有最小的完美散列函數,這是一個非常特殊的情況,你應該提及這個問題,可能你會如何實現這一點。

無論如何,我懷疑你會得到任何正式的線程安全保證unordered_map的操作,即使你會提供最小的完美哈希函數。

+0

其目的不是爲了提高性能或完美的散列,而是爲了防止容器被重新組裝,因此元素四處移動。 – goji 2013-03-01 07:37:14

+0

你應該閱讀並理解那篇文章。對於哈希映射來均勻分割n個桶中的n個對象,您必須具有最小的完美哈希函數。否則,您無法輕易預測n個對象將使用多少個桶,而您的問題沒有意義 - 將桶的數量設置爲特定值不會影響線程安全性。 – Slava 2013-03-01 13:05:03