hotspot/src/os/solaris/vm/threadCritical_solaris.cpp
ThreadCritical::ThreadCritical() {
{- -------------------------------------------
(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.