os クラス内で使用される補助クラス (See: os).
(このクラスが Linux に依存した機能 (システムコール等) を os クラス本体から隠蔽している)
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
class Linux {
See: here for details
Linux 環境における OSThread クラス用の補助クラス (See: OSThread).
signal を用いたスレッドの suspend/resume 処理で使用されるクラス. 現在のスレッドのサスペンド状態(サスペンドされていない, サスペンド状態への移行中, サスペンド中)を表す.
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
// Linux suspend/resume support - this helper is a shadow of its former
// self now that low-level suspension is barely used, and old workarounds
// for LinuxThreads are no longer needed.
class SuspendResume {
Linux 用の OSThread オブジェクトの sr フィールドに(のみ)格納されている.
((cite: hotspot/src/os/linux/vm/osThread_linux.hpp))
// flags that support signal based suspend/resume on Linux are in a
// separate class to avoid confusion with many flags in OSThread that
// are used by VM level suspend/resume.
os::Linux::SuspendResume sr;
現在は FlatProfiler によるプロファイル取得処理で(のみ)使用されている. より具体的に言うと, 以下の箇所で(のみ)使用されている (See: here for details).
See: here for details
ParkEvent クラスのスーパークラス. このクラスが実際のスレッド制御機能を提供している (ParkEvent はこのクラスのラッパー的な存在) (See: ParkEvent) (See: here for details).
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
class PlatformEvent : public CHeapObj {
内部的には, _Event というフィールドが mutex 代わりになっている.
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
volatile int _Event ;
_Event フィールドは 0 か 1 の値を取る.
0 は通常の状態. この状態で park() するとブロックされる.
1 は park() よりも先に unpark() 処理が行われた状態. この状態で park() すると (先の unpark() と相殺される形になり) ブロックはされない (単に _Event が 0 になるだけ).
そして, park()/unpark() 処理は以下のように実装されている.
park() 操作では, _Event の値を 1つデクリメントする.
値が 0 未満になってしまったら, 誰かが unpark() してくれるまで待機する (待機する方法はプラットフォーム依存で, pthread_cond_wait() だったり WaitForSingleObject() だったりする).
unpark() 操作では, _Event の値を 1つインクリメントする (ただし, 現在の値が 1であれば何もしない).
元の値が負値だった場合は, 待機しているスレッドを起こす (起こす方法はプラットフォーム依存で, pthread_cond_signal() だったり SetEvent() だったりする).
また, 現在待機中のスレッド数は _nParked というフィールドに記録されている (このフィールドも 0 か 1 しか取らない. このフィールドが 0 の場合には, unpark() 内での起床処理が省略される).
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
volatile int _nParked ;
See: here for details
Parker クラスのスーパークラス. このクラスが実際のスレッド制御機能を提供している (Parker はこのクラスのラッパー的な存在) (See: Parker) (See: here for details).
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/os/linux/vm/os_linux.hpp))
class PlatformParker : public CHeapObj {
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.