Thread safe adgang til dictionary
Jeg bliver lidt i tvivl om hvordan jeg skal gøre min læse/skrive adgang til et dictionary thread safe. Jeg vil gerne opnå at flere kan læse, men kun en kan skrive. Jeg ved at ReaderWriterLock vil kunne gøre det for mig, men tænker at nedenstående kode er endnu hurtigere, da der kan læses imens der skrives. Men er det thread safe at læse en key imens en anden key skrives? De to TryGetValue skyldes, at jeg ikke ønsker at to tråde slår den samme værdi op. For nemhedens skyld lægges der bare en streng i dictionary, men det kunne fx være et databaseopslag.class MyCache
{
static object l = new object();
static Dictionary<int, string> dic = new Dictionary<int, string>();
static string Get(int id)
{
string result = null;
if (!dic.TryGetValue(id, out result))
{
lock (l)
{
if (!dic.TryGetValue(id, out result))
{
dic.Add(id, "id " + id);
}
}
}
return result;
}
}