hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp
void SurrogateLockerThread::manipulatePLL(SLT_msg_type msg) {
{- -------------------------------------------
(1) (以下の処理は _monitor フィールド (コンストラクタ引数で渡された Monitor オブジェクト) のロックを取った状態で行う)
---------------------------------------- -}
MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(_buffer == empty, "Should be empty");
assert(msg != empty, "empty message");
{- -------------------------------------------
(1) _buffer フィールドに msg 引数のメッセージをセットする.
---------------------------------------- -}
_buffer = msg;
{- -------------------------------------------
(1) _monitor フィールドに対して Monitor::notify() を呼んで SurrogateLockerThread スレッドを起床させる.
その後, _monitor フィールドに対して Monitor::wait() して, SurrogateLockerThread の処理が終わるまで待機する.
(この処理は, _buffer フィールドが空になっていなければ, 空になるまで何度でも繰り返す)
---------------------------------------- -}
while (_buffer != empty) {
_monitor.notify();
_monitor.wait(Mutex::_no_safepoint_check_flag);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.