Top

os クラスのプラットフォーム依存な補助クラス (os::Linux, os::Linux::SuspendResume, os::PlatformEvent, os::PlatformParker)

クラス一覧(class list)


os::Linux

概要(Summary)

os クラス内で使用される補助クラス (See: os).

(このクラスが Linux に依存した機能 (システムコール等) を os クラス本体から隠蔽している)

    ((cite: hotspot/src/os/linux/vm/os_linux.hpp))
    class Linux {

詳細(Details)

See: here for details


os::Linux::SuspendResume

概要(Summary)

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 {

使われ方(Usage)

インスタンスの格納場所(where its instances are stored)

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;

使用箇所(where its instances are used)

現在は FlatProfiler によるプロファイル取得処理で(のみ)使用されている. より具体的に言うと, 以下の箇所で(のみ)使用されている (See: here for details).

詳細(Details)

See: here for details


os::PlatformEvent

概要(Summary)

ParkEvent クラスのスーパークラス. このクラスが実際のスレッド制御機能を提供している (ParkEvent はこのクラスのラッパー的な存在) (See: ParkEvent) (See: here for details).

なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.

    ((cite: hotspot/src/os/linux/vm/os_linux.hpp))
    class PlatformEvent : public CHeapObj {

使われ方(Usage)

使用方法の概要(how to use)

  1. 適当な os::PlatformEvent オブジェクトを用意して os::PlatformEvent::park() を呼ぶと, park() を呼んだスレッドがブロックされる.
  2. 別のスレッドがその os::PlatformEvent オブジェクトに対して os::PlatformEvent::unpark() を呼ぶと, ブロックしていたスレッドが起床される.
  3. なお, ブロックにタイムアウトを付けたい場合は, os::PlatformEvent::park() の代わりに os::PlatformEvent::park(jlong millis) を使えばいい.

内部構造(Internal structure)

内部的には, _Event というフィールドが mutex 代わりになっている.

    ((cite: hotspot/src/os/linux/vm/os_linux.hpp))
        volatile int _Event ;

_Event フィールドは 0 か 1 の値を取る.

そして, park()/unpark() 処理は以下のように実装されている.

また, 現在待機中のスレッド数は _nParked というフィールドに記録されている (このフィールドも 0 か 1 しか取らない. このフィールドが 0 の場合には, unpark() 内での起床処理が省略される).

    ((cite: hotspot/src/os/linux/vm/os_linux.hpp))
        volatile int _nParked ;

詳細(Details)

See: here for details


os::PlatformParker

概要(Summary)

Parker クラスのスーパークラス. このクラスが実際のスレッド制御機能を提供している (Parker はこのクラスのラッパー的な存在) (See: Parker) (See: here for details).

なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.

    ((cite: hotspot/src/os/linux/vm/os_linux.hpp))
    class PlatformParker : public CHeapObj {

詳細(Details)

See: here for details



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