Top


定義場所(file name)

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

説明(description)

// NOTE: see comment of notify()

名前(function name)

void ObjectSynchronizer::notifyall(Handle obj, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) もし UseBiasedLocking オプションが指定されていた場合には, BiasedLocking::revoke_and_rebias() で biased を解除しておく.
      ---------------------------------------- -}

      if (UseBiasedLocking) {
        BiasedLocking::revoke_and_rebias(obj, false, THREAD);
        assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
      }

  {- -------------------------------------------
  (1) もし, オブジェクトが stack-locked 状態で (= wait() で待っているスレッドはいない状態で), 
      きちんと自分がそのロックを持っている場合には, 何もせずに終了.
      ---------------------------------------- -}

      markOop mark = obj->mark();
      if (mark->has_locker() && THREAD->is_lock_owned((address)mark->locker())) {
        return;
      }

  {- -------------------------------------------
  (1) ObjectSynchronizer::inflate() で ObjectMonitor を取得し, ObjectMonitor::notify() を呼び出す
      ---------------------------------------- -}

      ObjectSynchronizer::inflate(THREAD, obj())->notifyAll(THREAD);
    }

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