Top

ThreadCritical クラス


ThreadCritical

概要(Summary)

スレッド間の排他処理を行うためのユーティリティ・クラス.

ThreadCritical クラスは, 対応する mutex を大域に 1つだけ保持しており, その mutex に対する排他処理(ロックの確保/開放処理)をソースコード上のスコープに合わせて行うことができるクラス(StackObjクラス).

なお, スレッド間の排他処理を行うためのクラスは幾つか存在している (See: here for details). その中でも ThreadCritical は HotSpot の初期化作業のかなり早い段階でも使われるクラスなので, HotSpot 内の他の機構には頼らない実装になっている (See: here for details).

なお, このクラスによるロックは reentrant である (= 同一スレッドが複数回ロックを取得できる).

    ((cite: hotspot/src/share/vm/runtime/threadCritical.hpp))
    // ThreadCritical is used to protect short non-blocking critical sections.
    // This class must use no vm facilities that require initialization.
    // It is used very early in the vm's initialization, in allocation
    // code and other areas. ThreadCritical regions are reentrant.
    //
    // Due to race conditions during vm exit, some of the os level
    // synchronization primitives may not be deallocated at exit. It
    // is a good plan to implement the platform dependent sections of
    // code with resources that are recoverable during process
    // cleanup by the os. Calling the initialize method before use
    // is also problematic, it is best to use preinitialized primitives
    // if possible. As an example:
    //
    // mutex_t  mp  =  DEFAULTMUTEX;
    //
    // Also note that this class is declared as a StackObj to enforce
    // block structured short locks. It cannot be declared a ResourceObj
    // or CHeapObj, due to initialization issues.

    class ThreadCritical : public StackObj {

使われ方(Usage)

以下の箇所で(のみ)使用されている.

詳細(Details)

See: here for details



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