Вы хотите сказать, что хотите, чтобы никто другой не использовал словарь , или никто другой не использовал значение, которое было в словаре?
Вы можете решить первое с помощью блокировки ... но вы не можете сделать второе.Кто-то может получить ссылку на объект из словаря и сохранить эту ссылку так долго, как пожелает. может быть решением, если значение является типом интерфейса - вы можете делегировать все вызовы через дополнительный класс «обертки» и лишить законной силы этот класс обертки.Я могу вдаваться в подробности, если хотите, но я надеюсь вы действительно просто заинтересованы в первом типе безопасности:)
Этого можно достичь следующим образом:
private static readonly object mutex = new object();
// Or whatever
private static readonly Dictionary<string, string> map =
new Dictionary<string, string>();
public static void AddEntry(string key, string value)
{
lock (mutex)
{
map[key] = value;
}
}
public static string GetValue(string key, string value)
{
lock (mutex)
{
return map[key];
}
}
Очевидно, вы захотите настроить способ использования словаря.
Если вы используете .NET 4, другой альтернативой будет использование ConcurrentDictionary
, который уже поточно-ориентирован.