Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NAME
       ck_ring_dequeue_spmc -- dequeue pointer from bounded FIFO

LIBRARY
       Concurrency Kit (libck, -lck)

SYNOPSIS
       #include	<ck_ring.h>

       bool
       ck_ring_dequeue_spmc(ck_ring_t	 *ring,	   ck_ring_buffer_t   *buffer,
	   void	*result);

DESCRIPTION
       The  ck_ring_dequeue_spmc(3)  function  dequeues	 a  pointer  from  the
       bounded	buffer	pointed	 to  by	 ring  in FIFO fashion.	The pointer is
       stored in the pointer pointed to	by result.  The	buffer pointed	to  by
       buffer  must  be	 unique	 to ring.  The decoupling of the ring from the
       buffer serves to	address	use-cases involving  multiple  address	spaces
       and  DMA,  among	others.	 If you	are on non-POSIX platforms or wish for
       strict compliance with C, then it is recommended	to pass	a  pointer  of
       type void ** for	result.	 This function is safe to call without locking
       for  UINT_MAX  concurrent  invocations  of  ck_ring_dequeue_spmc(3)  or
       ck_ring_trydequeue_spmc(3)     and     up     to	    one	    concurrent
       ck_ring_enqueue_spmc(3)	or ck_ring_tryenqueue_spmc(3) invocation. This
       function	provides lock-free progress guarantees.

EXAMPLE
	     #include <ck_ring.h>

	     /*	This ring was previously initialized with ck_ring_init.	*/
	     ck_ring_t ring;

	     /*	The ring was initialized for 1023 elements. */
	     ck_ring_buffer_t buffer[1024];

	     void
	     dequeue(void)
	     {
		     void *result;

		     /*	Dequeue	from ring until	it is empty. */
		     while (ck_ring_dequeue_spmc(&ring,	&buffer, &result) == true) {
			     /*
			      *	Results	contains the oldest pointer in ring
			      *	since the dequeue operation returned true.
			      */
			     operation(result);
		     }

		     /*	An empty ring was encountered, leave. */
		     return;
	     }

RETURN VALUES
       The function returns true if the	buffer was non-empty.  The  result  of
       the dequeue operation is	stored in the value pointed to by result.  The
       function	 will  return  false  if the buffer was	empty and the value in
       result will be undefined.

SEE ALSO
       ck_ring_init(3),	 ck_ring_trydequeue_spmc(3),  ck_ring_enqueue_spmc(3),
       ck_ring_enqueue_spmc_size(3),		      ck_ring_dequeue_spsc(3),
       ck_ring_enqueue_spsc(3),			 ck_ring_enqueue_spsc_size(3),
       ck_ring_capacity(3), ck_ring_size(3)

       Additional information available	at http://concurrencykit.org/

				April 20, 2013	       CK_RING_DEQUEUE_SPMC(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ck_ring_dequeue_spmc&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help