日本語 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.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
CONDVAR(9) FreeBSD カーネル開発者マニュアル CONDVAR(9) 名称 condvar, cv_init, cv_destroy, cv_wait, cv_wait_sig, cv_wait_unlock, cv_timedwait, cv_timedwait_sbt, cv_timedwait_sig, cv_timedwait_sig_sbt, cv_signal, cv_broadcast, cv_broadcastpri, cv_wmesg -- カーネル状態変数 書式 #include <sys/param.h> #include <sys/proc.h> #include <sys/condvar.h> void cv_init(struct cv *cvp, const char *desc); void cv_destroy(struct cv *cvp); void cv_wait(struct cv *cvp, lock); int cv_wait_sig(struct cv *cvp, lock); void cv_wait_unlock(struct cv *cvp, lock); int cv_timedwait(struct cv *cvp, lock, int timo); int cv_timedwait_sbt(struct cv *cvp, lock, sbintime_t sbt, sbintime_t pr, int flags); int cv_timedwait_sig(struct cv *cvp, lock, int timo); int cv_timedwait_sig_sbt(struct cv *cvp, lock, sbintime_t sbt, sbintime_t pr, int flags); void cv_signal(struct cv *cvp); void cv_broadcast(struct cv *cvp); void cv_broadcastpri(struct cv *cvp, int pri); const char * cv_wmesg(struct cv *cvp); 解説 状態変数は、状態が起こるのを待つために mutex (ミューテックス) とともに使 用されます。状態変数は、cv_init() で作成され、ここで cvp は、struct cv の ための空間を指し、desc は、状態変数を記述するヌル文字で終了する文字列への ポインタです。状態変数は、cv_destroy() で破壊されます。スレッドは、 cv_wait(), cv_wait_sig(), cv_wait_unlock(), cv_timedwait() または cv_timedwait_sig() を呼び出すことによって、状態変数でウェートします。ス レッドは、1 つのウェイタ (waiter) のブロックを解除するために cv_signal() を呼び出すことによってウェイタのブロックを解除するか、またはすべてのウェ イタのブロックを解除するために cv_broadcast() または cv_broadcastpri() を 呼び出すことによってウェイタ (waiter) のブロックを解除します。ウェイタ (waiter) を起こすことに加えて、cv_broadcastpri() は、あらゆるスレッドの優 先度を上げることによって、すべてのウェイタが少なくとも pri の優先度がある ことを保証します。cv_wmesg() は、cv_init() への最初の呼び出しによって設定 されるように、cvp の記述文字列を返します。 lock 引数は、mutex(9), rwlock(9) または sx(9) ロックのいずれかへのポイン タです。mutex(9) 引数は、MTX_SPIN ではなく、MTX_DEF で初期化されなければ なりません。スレッドは、cv_wait(), cv_wait_sig(), cv_wait_unlock(), cv_timedwait() または cv_timedwait_sig() を呼び出す前に lock を保持しなけ ればなりません。スレッドがある状態でウェートするときに、lock は、そのス レッドがブロックされる前に不可分に開放され、それからその関数呼び出しが戻 る前に再獲得されます。さらに、スレッドは、サスペンド (一時停止) している 間に、(たとえ、繰り返されても) Giant mutex を完全に落とし、関数が返る前 に、Giant mutex を再獲得します。cv_wait_unlock() 関数は、返る前に、ロック を再獲得しません。Giant mutex が、lock として指定されるかもしれないことに 注意してください。しかしながら、Giant は、cv_wait_unlock() 関数のために lock として使用されません。すべてのウェイタ (waiter) は、cvp と関連する同 じ lock を渡さなければなりません。 cv_wait(), cv_wait_sig(), cv_wait_unlock(), cv_timedwait() と cv_timedwait_sig() がブロックを解除するとき、それらの呼び出しているスレッ ドは、実行可能とされます。cv_timedwait() と cv_timedwait_sig() は、ブロッ クを解除して、EWOULDBLOCK を返す前に、多くても timo / HZ 秒待ちます。そう でなければ、それらは、0 を返します。cv_wait_sig() と cv_timedwait_sig() は、シグナルが捕獲されるか、または cv_signal() または cv_broadcast() に よってシグナルが送られるなら、EINTR または ERESTART の値で時期を早めて返 ります。 cv_timedwait_sbt() と cv_timedwait_sig_sbt() 関数は、timo の代わりに sbt 引数を取ります。それは、sbintime_t の形式でより高い解像度がある、相対的 か、または絶対的なブロック解除 (unblock) 時間を指定することができます。パ ラメータ pr によって、必要とされる絶対的なイベントの正確さを指定すること ができます。パラメータ flags によって、追加の callout_reset_sbt() フラグ を渡すことができます。 戻り値 成功するなら、cv_wait_sig(), cv_timedwait() と cv_timedwait_sig() は、0 を返します。そうでなければ、0 以外のエラーコードが返されます。 cv_wmesg() は、cv_init() に渡された記述文字列を返します。 エラー cv_wait_sig() と cv_timedwait_sig() は、次の場合に失敗します: [EINTR] シグナルが捕獲され、システムコールが、割り込まれるべき です。 [ERESTART] シグナルが捕獲され、システムコールが、再開されるべきで す。 cv_timedwait() と cv_timedwait_sig() は、次の場合に失敗します: [EWOULDBLOCK] タイムアウトが満了しました。 関連項目 locking(9), mtx_pool(9), mutex(9), rwlock(9), sema(9), sleep(9), sx(9), timeout(9) FreeBSD 11.4 February 19, 2013 FreeBSD 11.4