かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

スレッドセーフなブツ

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;
    }
  }
}

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