Is this non-locked TryGetValue() dictionary access thread-safe?

前端 未结 3 802
囚心锁ツ
囚心锁ツ 2020-12-31 07:14
private object lockObj = new object();

private Dictionary dict = new Dictionary();

public string GetOrAddFromDict(int key)
{
         


        
3条回答
  •  说谎
    说谎 (楼主)
    2020-12-31 07:44

    Question a: Is it thread-safe? If yes, why?

    Not only is it not thread safe; it will also throw with NullReferenceException if accessed while another thread is reorganizing the hash buckets. The lock statement is wicked fast, don't avoid it.

    Question b: How is this double-TryGetValue() pattern called?

    It's called a 'bug' by most people ;)

提交回复
热议问题