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

FreeBSD Manual Pages

  
 
  

home | help
NAME
     ck_epoch_barrier  -- block until a grace period and all callbacks have been
     dispatched

LIBRARY
     Concurrency Kit (libck, -lck)

SYNOPSIS
     #include <ck_epoch.h>

     void
     ck_epoch_barrier(ck_epoch_record_t *record);

DESCRIPTION
     The ck_epoch_barrier(3) function will block the caller until a grace period
     has been detected, according to the semantics of  epoch  reclamation.   Any
     objects  requiring  safe memory reclamation which are logically deleted are
     safe for physical deletion following a call  to  ck_epoch_barrier(3).  This
     function  will  also dispatch all callbacks associated with epoch that were
     previously scheduled via ck_epoch_call(3).

EXAMPLE
	   #include <ck_epoch.h>
	   #include <ck_stack.h>
	   #include <stdlib.h>

	   /*
	    * epoch was previously initialized with ck_epoch_init.
	    * stack was previously initialized with ck_stack_init.
	    */
	   ck_epoch_t *epoch;
	   ck_stack_t *stack;

	   void
	   function(void)
	   {
		   ck_epoch_record_t *record;
		   ck_stack_entry_t *s;

		   record = malloc(sizeof *record);
		   ck_epoch_register(&epoch, record, NULL);

		   /*
		    * We are using an epoch section here to guarantee no
		    * nodes in the stack are deleted while we are dereferencing
		    * them. This is needed here because there are multiple writers.
		    * If there was only one thread popping from the this stack,
		    * then there is no need to ck_epoch_begin/ck_epoch_end.
		    */
		   ck_epoch_begin(record);

		   /* Logically delete an object. */
		   s = ck_stack_pop_upmc(stack);

		   ck_epoch_end(record);

		   /*
		    * Wait until no threads could possibly have a reference to the
		    * object we just popped (assume all threads are simply executing
		    * ck_stack_pop_upmc).
		    */
		   ck_epoch_barrier(record);

		   /* It is now safe to physically delete the object. */
		   free(s);
		   return;
	   }

RETURN VALUES
     This function has no return value.

ERRORS
     Behavior is undefined if the object pointed to by	epoch  is  not	a  valid
     epoch  object.  The  object  pointed to by record must have been previously
     registered via ck_epoch_register(3).

SEE ALSO
     ck_epoch_init(3),	     ck_epoch_register(3),	 ck_epoch_unregister(3),
     ck_epoch_recycle(3),	ck_epoch_poll(3),	ck_epoch_synchronize(3),
     ck_epoch_reclaim(3), ck_epoch_call(3), ck_epoch_begin(3), ck_epoch_end(3)

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

				September 2, 2012	     CK_EPOCH_BARRIER(3)

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

home | help