Top


定義場所(file name)

hotspot/src/os/solaris/vm/threadCritical_solaris.cpp

名前(function name)

ThreadCritical::ThreadCritical() {

本体部(body)

  {- -------------------------------------------
  (1) (ThreadCritical::initialize() が呼ばれるまでは 
       (= initialize が false であれば) 何もしない)
      ---------------------------------------- -}

      if (initialized) {

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

        thread_t owner = thr_self();

  {- -------------------------------------------
  (1) 現在ロックを保持しているのがカレントスレッドでなければ, 
      os::Solaris::mutex_lock() でロックの確保を行う
      ---------------------------------------- -}

        if (global_mut_owner != owner) {
          if (os::Solaris::mutex_lock(&global_mut))
            fatal(err_msg("ThreadCritical::ThreadCritical: mutex_lock failed (%s)",
                          strerror(errno)));
          assert(global_mut_count == 0, "must have clean count");
          assert(global_mut_owner == -1, "must have clean owner");
        }

  {- -------------------------------------------
  (1) ロック保持者を示す変数(lock_owner)にカレントスレッドをセットする.

      (これは上の if の中にあるべきでは?? 毎回セットするのは無駄なような... #TODO)
      ---------------------------------------- -}

        global_mut_owner = owner;

  {- -------------------------------------------
  (1) ロックの再帰確保数をインクリメントしておく.
      ---------------------------------------- -}

        ++global_mut_count;

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      } else {
        assert (Threads::number_of_threads() == 0, "valid only during initialization");
      }
    }

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