EN JA
SELRECORD(9)
SELRECORD(9) FreeBSD Kernel Developer's Manual SELRECORD(9)

名称

seldrain, selrecord, selwakeup選択要求を記録してウェイクアップする

書式

#include < sys/param.h>
#include < sys/selinfo.h>

void
seldrain( struct selinfo *sip);

void
selrecord( struct thread *td, struct selinfo *sip);

void
selwakeup( struct selinfo *sip);

解説

seldrain(), selrecord() と selwakeup() は、 select(2), poll(2) と選択されたオブジェクトによって使用される 3 つの重要な関数で、それらは、どのスレッドがどのオブジェクトで待っているかを記録し、関心があるイベントがオブジェクトで起こるとき、適切なスレッドを起こすタスクを取り扱います。

selrecord() は、与えられたオブジェクトに関連したイベントで関心がある呼び出したスレッドを記録します。別のスレッドがオブジェクトで既に待っているなら、衝突は、後で selwakeup() によって処理される sip でフラグが付けられます。

selrecord() は、 sellock を取得して、解放します。

selwakeup() は、関心があるイベントが起こったことを待っているすべてのスレッドに通知するために、基本的なオブジェクトの取り扱いコードによって呼び出されます。衝突が起こったなら、 selwakeup() は、 nselcoll を増加し、それを取り扱うことができるように、すべての待っているスレッドを起こすためにグローバル cv でブロードキャスト (同報通信) します。オブジェクトで待っているスレッドが現在、スリープしていないか、待ちチャネルが selwait でないなら、 selwakeup() は、それらが起こされるとき、 select(2)poll(2) によって留意されるべきである TDF_SELECT フラグをクリアします。

seldrain() は、破壊の前に、指定されたオブジェクトの待ちのキューをフラッシュします。オブジェクト操作コードは、 seldrain() がいったん呼び出されると *sip を使用できないことを確実にしなければなりません。

selrecord() または selwakeup() への呼び出しの前に、softc 初期化のように、 *sip の内容は、0 でなければなりません、そうでなければ、パニックが起こるかもしれません。 selwakeup() は、 sellock を取得して、解放し、そして sched_lock を取得して、解放します。 seldrain() は、通常、単なる selwakeup() のためのラッパであるかもしれませんが、一般的に、消費者は、この機能を当てにするべきではありません。

関連項目

poll(2), select(2)

作者

このマニュアルページは、 Chad David <davidc@FreeBSD.org>と Alfred Perlstein <alfred@FreeBSD.org>によって書かれました。
August 25, 2011 FreeBSD