FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 関連項目 | 歴史 | 作者 | バグ
RMLOCK(9)              FreeBSD カーネル開発者マニュアル              RMLOCK(9)

名称
     rmlock, rm_init, rm_init_flags, rm_destroy, rm_rlock, rm_try_rlock,
     rm_wlock, rm_runlock, rm_wunlock, rm_wowned, rm_sleep, rm_assert,
     RM_SYSINIT, RM_SYSINIT_FLAGS -- ほとんどの読み込みアクセスパターンのため
     に最適化されたカーネル読み込み側/書き込み側 (reader/writer) ロック

書式
     #include <sys/param.h>
     #include <sys/lock.h>
     #include <sys/rmlock.h>

     void
     rm_init(struct rmlock *rm, const char *name);

     void
     rm_init_flags(struct rmlock *rm, const char *name, int opts);

     void
     rm_destroy(struct rmlock *rm);

     void
     rm_rlock(struct rmlock *rm, struct rm_priotracker* tracker);

     int
     rm_try_rlock(struct rmlock *rm, struct rm_priotracker* tracker);

     void
     rm_wlock(struct rmlock *rm);

     void
     rm_runlock(struct rmlock *rm, struct rm_priotracker* tracker);

     void
     rm_wunlock(struct rmlock *rm);

     int
     rm_wowned(const struct rmlock *rm);

     int
     rm_sleep(void *wchan, struct rmlock *rm, int priority, const char *wmesg,
         int timo);

     options INVARIANTS
     options INVARIANT_SUPPORT

     void
     rm_assert(struct rmlock *rm, int what);

     #include <sys/kernel.h>

     RM_SYSINIT(name, struct rmlock *rm, const char *desc);

     RM_SYSINIT_FLAGS(name, struct rmlock *rm, const char *desc, int flags);

解説
     ほとんどの読み込みロックによって、複数のスレッドによって保護されたデータ
     への共有アクセスができるか、または単一のスレッドによって排他的なアクセス
     ができます。共有アクセスがあるスレッドは、それらが保護されたデータを読み
     込めるだけであるので、reader として知られています。排他的なアクセスがある
     スレッドは、保護されたデータを変更することができるので、writer として知ら
     れています。

     ほとんどの読み込みロックは、読み込み側ロックとして使用されるほとんどの排
     他的ロックのために効率的になるように設計されていて、そのようなものとし
     て、めったに変化しないデータを保護するために使用されるべきです。共用アク
     セスのためにロックされた後に排他的なロックを獲得することは、高価な操作で
     す。

     通常、ほとんどの読み込みロックは、rwlock(9) ロックに似ていて、rwlock(9)
     ロックとして同じロック順序規則に従います。ほとんどの読み込みロックには、
     ミューテックス (mutex) のような十分な優先権伝播があります。rwlock(9) と異
     なり、ほとんどの読み込みロックは、読み込み側と書き込み側の両方に優先権を
     伝播します。これは、rm_rlock() と rm_runlock() に供給される
     rm_priotracker 構造体の引数によって実装されます。読み込み側は、ロックが
     RM_RECURSE オプションで初期化されるなら、繰り返すことができます。しかしな
     がら、書き込み側は、決して繰り返すことはできません。

     スリープ可能なほとんどの読み込みロックは、rm_init_flags().  に
     RM_SLEEPABLE を渡すことによって作成されます。通常のほんどの読み込みロック
     と異なり、スリープ可能なほとんどの読み込みロックは、sx(9) ロックとして同
     じロックの順序規則に従います。スリープ可能なほとんどの読み込みロックは、
     書き込み側に優先権を伝播しませんが、それらは、読み込み側に優先権を伝播し
     ます。書き込み側は、ほとんどの読み込みロックを保持する間にスリープするこ
     とが許されますが、読み込み側は、そうではありません。sx(9) ロックのよう
     な、他のスリープ可能なロックと異なり、読み込み側は、スリープを回避するた
     めに他のスリープ可能なロックで試みの操作を使用しなければなりません。

   マクロと関数
     rm_init(struct rmlock *rm, const char *name)
             ほとんどの読み込みロック rm 初期化します。name 記述は、単にデバッ
             グ目的のために使用されます。この関数は、ロックにおいて任意の他の
             操作の前に呼び出されなければなりません。

     rm_init_flags(struct rmlock *rm, const char *name, int opts)
             rm_init() に似て、1 組のオプションのフラグを付けて、ほとんどの読
             み込みロック rm を初期化します。opts 引数は、次の 1 つ以上のフラ
             グを含んでいます:

             RM_NOWITNESS  このロックを無視するよう witness(4) に指示します。

             RM_RECURSE    スレッドは、rm のための共有ロックを再帰的に獲得する
                           ことができます。

             RM_SLEEPABLE  スリープ可能なほとんどの読み込みロックを作成しま
                           す。

             RM_NEW        カーネルが option INVARIANTS でコンパイルされたな
                           ら、rm_init_flags() は、rm が、このオプションが指定
                           されないなら、介在されている rm_destroy() への呼び
                           出しなしで、何度も初期化されていないことをアサート
                           します。

     rm_rlock(struct rmlock *rm, struct rm_priotracker* tracker)
             優先権の伝播のためのロックの読み込み所有者を追跡するために
             tracker を使用して、読み込み側 (reader) として rm をロックしま
             す。このデータ構造は、rmlock によって内部的に使用されるだけであ
             り、rm_runlock() が呼び出されるまで、存続しなければなりません。読
             み込み側がスリープできないので、このデータ構造をスタックに割り付
             けることができます。任意のスレッドが排他的に、このロックを保持し
             ているなら、現在のスレッドは、ブロックし、優先権は、排他的な所有
             者へ伝播されます。ロックが RM_RECURSE オプションで初期化されたな
             ら、現在のスレッドに rm で既に獲得された読み込み側のアクセスがあ
             るとき、rm_rlock() 関数を呼び出すことができます。

     rm_try_rlock(struct rmlock *rm, struct rm_priotracker* tracker)
             読み込み側 (reader) として rm のロックを試みます。rm_try_rlock()
             は、ロックが直ちに獲得できないなら、0 を返します。そうでなけれ
             ば、ロックが獲得され、0 以外の値を返します。ロックが現在書き込み
             側 (writer) によって保持されていない間でさえ、rm_try_rlock() が失
             敗するかもしれないことに注意してください。ロックが RM_RECURSE オ
             プションで初期化されたなら、rm_try_rlock() は、現在のスレッドに既
             に獲得された読み込み側のアクセスがあるなら、成功します。

     rm_wlock(struct rmlock *rm)
             書き込み側 (writer) として rm をロックします。ロックを共有する複
             数の所有者がいるなら、現在のスレッドは、ブロックします。
             rm_wlock() 関数を再帰的に呼び出すことはできません。

     rm_runlock(struct rmlock *rm, struct rm_priotracker* tracker)
             この関数は、以前に rm_rlock() によって獲得された共有されたロック
             を解放します。tracker 引数は、共有されたロックを獲得するために使
             用される tracker 引数とマッチしなければなりません。

     rm_wunlock(struct rmlock *rm)
             この関数は、以前に rm_wlock() によって獲得された排他的なロックを
             解放します。

     rm_destroy(struct rmlock *rm)
             この関数は、以前に rm_init() で初期化されたロックを破壊します。rm
             ロックは、アンロックされていなければなりません。

     rm_wowned(const struct rmlock *rm)
             この関数は、現在のスレッドが rm で排他的なロックを所有しているな
             ら、0 以外を返します。

     rm_sleep(void *wchan, struct rmlock *rm, int priority, const char *wmesg,
             int timo)
             この関数は、イベントを待つ間に、不可分に rm を解放します。rm ロッ
             クは、排他的にロックされなければなりません。この関数へのパラメー
             タのより詳しい情報については、sleep(9) を参照してください。

     rm_assert(struct rmlock *rm, int what)
             この関数は、rm ロックが what によって指定された状態であることをア
             サートします。アサーションが真でなく、カーネルが options
             INVARIANTSoptions INVARIANT_SUPPORT でコンパイルされているな
             ら、カーネルは、パニックします。現在、次の基本的なアサーションが
             サポートされています:

             RA_LOCKED    現在のスレッドが rm の共有または排他的なロックのいず
                          れかを保持しているかをアサートします。

             RA_RLOCKED   現在のスレッドが rm の共有されるロックを保持している
                          かをアサートします。

             RA_WLOCKED   現在のスレッドが rm の排他的ロックを保持しているかを
                          アサートします。

             RA_UNLOCKED  現在のスレッドが rm の共有されるか、または排他的ロッ
                          クのいずれかを保持しているかをアサートします。

             さらに、次のオプションのフラグの 1 つは、RA_LOCKED, RA_RLOCKED ま
             たは RA_WLOCKED で指定されます:

             RA_RECURSED     現在のスレッドが rm の再帰的なロックを保持してい
                             るかをアサートします。

             RA_NOTRECURSED  現在のスレッドが rm の再帰的なロックを保持しない
                             かをアサートします。

関連項目
     locking(9), mutex(9), panic(9), rwlock(9), sema(9), sleep(9), sx(9)

歴史
     これらの関数は、FreeBSD 7.0 で登場しました。

作者
     rmlock 機能は、Stephan Uphoff によって書かれました。このマニュアルページ
     は、rwlock に関して Gleb Smirnoff によって書かれ、Stephan Uphoff によって
     rmlock に反映するように変更されました。

バグ
     rmlock 実装は、現在、単一のプロセッサシステムのために最適化されません。

     rm_try_rlock() は、書き込み側がないときでさえ、一時的に失敗するかもしれま
     せんが、別の読み込み側は、ローカル CPU で状態を更新します。

     rmlock 実装は、システムのすべての rmlocks によって共有された CPU リストご
     とに 1 つを使用します。rmlocks が一般的になるなら、CPU キューごとの複数の
     ハッシュが、書き込み側ロックプロセスを早くするために必要であるかもしれま
     せん。

FreeBSD 11.2                   November 11, 2017                  FreeBSD 11.2

Table of Contents

FreeBSD マニュアル検索