hotspot/src/os/solaris/vm/os_solaris.cpp
void Parker::unpark() {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
int s, status ;
{- -------------------------------------------
(1) _counter の値を 1 に変更する.
(なお, この変更処理は os::Solaris::mutex_lock() で _mutex を取得して排他した状態で行う)
もし, 変更前の _counter の値が 0 であれば,
(park() で寝ているスレッドがいるということなので)
os::Solaris::cond_signal() でスレッドの起床処理を行う.
---------------------------------------- -}
status = os::Solaris::mutex_lock (_mutex) ;
assert (status == 0, "invariant") ;
s = _counter;
_counter = 1;
status = os::Solaris::mutex_unlock (_mutex) ;
assert (status == 0, "invariant") ;
if (s < 1) {
status = os::Solaris::cond_signal (_cond) ;
assert (status == 0, "invariant") ;
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.