かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

スレッドセーフなブツ

Javaだと

ThreadLocalを使う

class Hoge {
  private ThreadLocal local = new ThreadLocal();
  
  public Object getThreadLocalData() {
    Object ret = local.get();
    if(ret == null) {
      ret = new Object();
      local.set(ret);
    }
    return ret;
  }
}

こんな具合?(未コンパイル)

C#だと

同じ事をC#(というか.NET)でやろうとすると

class Hoge
{
  private LocalDataStoreSlot slot = Thread.AllocateDataSlot();
  
  public object ThreadLocalData
  {
    get
    {
      object ret = Thread.GetData(slot);
      if(ret == null)
      {
        ret = new object();
        Thread.SetData(slot, ret);
      }
      return ret;
    }
  }
}

こんな感じ(未コンパイル)