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

名称

buf_ring, buf_ring_alloc, buf_ring_free, buf_ring_enqueue, buf_ring_dequeue_mc, buf_ring_dequeue_sc, buf_ring_count, buf_ring_empty, buf_ring_full, buf_ring_peek, — マルチプロセッサ、{シングル、マルチ} コンシューマ (consumer)、ロックなしリングバッファ

書式

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

struct buf_ring *
buf_ring_alloc( int count, struct malloc_type *type, int flags, struct mtx *sc_lock);

void
buf_ring_free( struct buf_ring *br, struct malloc_type *type);

int
buf_ring_enqueue( struct buf_ring *br, void *buf);

void *
buf_ring_dequeue_mc( struct buf_ring *br);

void *
buf_ring_dequeue_sc( struct buf_ring *br);

int
buf_ring_count( struct buf_ring *br);

int
buf_ring_empty( struct buf_ring *br);

int
buf_ring_full( struct buf_ring *br);

void *
buf_ring_peek( struct buf_ring *br);

解説

buf_ring 関数は、シングルコンシューマのリングバッファと同様に、ロックのないマルチプロセッサとロックのないマルチコンシューマを提供しています。

buf_ring_alloc() 関数は、malloc_type type とメモリフラグ flags を使用して、 count スロットがある buf_ring リングバッファを割り付けるために使用されます。シングルコンシューマのインタフェースは、 sc_lock によって保護されます。

buf_ring_free() 関数は、buf_ring を解放するために使用されます。ユーザは、あらゆるキューに入れられた項目の解放に対して責任があります。

buf_ring_enqueue() 関数は、バッファを buf_ring のキューに入れるために使用されます。

buf_ring_dequeue_mc() 関数は、buf_ring から要素をキューから出すマルチコンシューマの安全な方法です。

buf_ring_dequeue_sc() 関数は、要素をキューから出すシングルコンシューマのインタフェースです - 連続してロックがあるアクセスを行うことをユーザに要求します。

buf_ring_count() 関数は、buf_ring 中の要素の数を返します。

buf_ring_empty() 関数は、buf_ring が空であるなら、 TRUE を返し、そうでなければ、 FALSE を返します。

buf_ring_full() 関数は、これ以上項目をキューに入れることができないなら、 TRUE を返し、そうでなければ、 FALSE を返します。

buf_ring_peek() 関数は、buf_ring が空でないなら、buf_ring 中の最後の要素へのポインタを返し、そうでなければ、 NULL を返します。

戻り値

buf_ring_enqueue() 関数は、buf_ring に利用可能なスロットがないなら、 ENOBUFS を返します。

歴史

これらの関数は、 FreeBSD 8.0 で導入されました。
September 27, 2012 FreeBSD