こんな感じのシングルトンクラスをマスターに作ってたんですが、
複数のスレッドからA.instance()を呼び出す際に、
ちょくちょくセグメンテーション違反で落っこちます。
static変数はスレッドセーフと思ってましたが、
根本的に何か間違っているでしょうか?

class A {
  B[] b;
  static A instance() {
    static A a;
    if(a is null) {
      a = new A();
    }
    a.update();
    return a;
  }
  void update() {
    B[] tmp;
    // 外部ファイルの更新チェック、読込み等。で、だいたいこの辺で落ちる
    synchronized(this) {
      b = tmp;
    }
  }
}
class B {}