Top


定義場所(file name)

hotspot/src/share/vm/runtime/thread.cpp

説明(description)

// GC Support

名前(function name)

bool Thread::claim_oops_do_par_case(int strong_roots_parity) {

本体部(body)

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      jint thread_parity = _oops_do_parity;

  {- -------------------------------------------
  (1) Atomic::cmpxchg() により, _oops_do_parity フィールドを 
      strong_roots_parity 引数の値に書き換えることを試みる.
      (ただし, 最初から strong_roots_parity 引数の値になっていた場合は諦める)

      書き換えが成功すれば true をリターン.

      逆に, 他のスレッドに書き換えられてしまった場合は
      (= 最初から strong_roots_parity 引数の値になっていた or Atomic::cmpxchg() が失敗した), 
      false をリターン
      ---------------------------------------- -}

      if (thread_parity != strong_roots_parity) {
        jint res = Atomic::cmpxchg(strong_roots_parity, &_oops_do_parity, thread_parity);
        if (res == thread_parity) return true;
        else {
          guarantee(res == strong_roots_parity, "Or else what?");
          assert(SharedHeap::heap()->n_par_threads() > 0,
                 "Should only fail when parallel.");
          return false;
        }
      }
      assert(SharedHeap::heap()->n_par_threads() > 0,
             "Should only fail when parallel.");
      return false;
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.