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

FreeBSD Manual Pages

  
 
  

home | help
NAME
       ck_ring_enqueue_spmc -- enqueue pointer into bounded FIFO

LIBRARY
       Concurrency Kit (libck, -lck)

SYNOPSIS
       #include	<ck_ring.h>

       bool
       ck_ring_enqueue_spmc(ck_ring_t	 *ring,	   ck_ring_buffer_t   *buffer,
	   void	*entry);

DESCRIPTION
       The ck_ring_enqueue_spmc(3) function enqueues the  pointer  entry  into
       the  bounded  buffer  pointed  to  by ring in FIFO fashion.  The	buffer
       pointed to by buffer must be unique to ring and point to	 an  array  of
       ck_ring_buffer_t	of sufficient length (according	to the power-of-2 ele-
       ments  in  the  buffer).	  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 entry.  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).   This function provides wait-free progress
       guarantees for one active invocation.

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
	     enqueue(void)
	     {
		     void *entry = some_object;

		     /*	Attempt	to enqueue pointer to some_object into buffer. */
		     if	(ck_ring_enqueue_spmc(&ring, &buffer, &entry) == false)	{
			     /*
			      *	The buffer was full and	the enqueue operation
			      *	has failed.
			      */
			     return;
		     }

		     /*	Enqueue	operation completed successfully. */
		     return;
	     }

RETURN VALUES
       The function returns true if the	value of entry	was  successfully  en-
       queued into ring.  The function will return false if the	value of entry
       could not be enqueued which only	occurs if ring was full.

SEE ALSO
       ck_ring_init(3),	 ck_ring_dequeue_spmc(3),  ck_ring_trydequeue_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_ENQUEUE_SPMC(3)

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

home | help