REFCOUNT(9) | FreeBSD Kernel Developer's Manual | REFCOUNT(9) |
名称
refcount, refcount_init, refcount_acquire, refcount_release — 単純な参照カウンタを管理する書式
#include < sys/param.h>#include < sys/refcount.h>
void
refcount_init( volatile u_int *count, u_int value);
void
refcount_acquire( volatile u_int *count);
int
refcount_release( volatile u_int *count);
解説
refcount 関数は、単純な参照カウンタを管理するための API を提供しています。呼び出し側は、符号なし整数のカウンタのための記憶域を提供します。この整数へのポインタは、 count を通して渡されます。通常、カウンタは、オブジェクトの存続期間を管理するのに使用され、オブジェクトのメンバとして格納されます。refcount_init() 関数は、 value へのカウンタの初期の値を設定するために使用されます。それは、参照するカウントされるオブジェクトを作成するとき、通常、使用されます。
refcount_acquire() 関数は、新しい参照を獲得するために使用されます。呼び出し側は、新しい参照を取得している間に、有効な参照を保持することを確実にする責任があります。例えば、オブジェクトがリストに格納され、リストがオブジェクトで参照を保持するなら、リストを保護するロックを保持することは、新しい参照を獲得するための十分な保護を提供します。
refcount_release() 関数は、既存の参照を解放するために使用されます。関数は、解放される参照が、最後の参照であったなら、0 以外の値を返します。そうでなければ、0 を返します。
これらのルーチンは、カウンタを管理することを除いて、インタ CPU (inter-CPU) 同期、データ保護、またはメモリオーダリング保証を提供しないことに注意してください。呼び出し側は、任意のオブジェクトを含んでいる消費者によって必要とされる任意の追加の同期に責任があります。また、さらに、呼び出し側は、最後の参照が解放されるとき、明白に任意のリソースを解放することを含んでいるオブジェクトを含む寿命を管理する責任があります。
戻り値
refcount_release 関数は、最後の参照を解放するとき、0 以外を返し、任意の他の参照も解放するとき、0 を返します。歴史
これらの関数は、 FreeBSD 6.0 で導入されました。January 20, 2009 | FreeBSD |