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

FreeBSD Manual Pages

  
 
  

home | help
CK_EPOCH_BARRIER(3)    FreeBSD Library Functions Manual	   CK_EPOCH_BARRIER(3)

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 pe-
     riod 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);

		   /*
		    * 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

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | EXAMPLE | RETURN VALUES | ERRORS | SEE ALSO

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

home | help