かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

スレッドセーフなブツ

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

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