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

FreeBSD Manual Pages

  
 
  

home | help
CK_EPOCH_SYNCHRONIZ... FreeBSD Library Functions Manual	CK_EPOCH_SYNCHRONIZ...

NAME
     ck_epoch_synchronize -- block until a grace period	has been detected

LIBRARY
     Concurrency Kit (libck, -lck)

SYNOPSIS
     #include <ck_epoch.h>

     void
     ck_epoch_synchronize(ck_epoch_record_t *record);

DESCRIPTION
     The ck_epoch_synchronize(3) function will block the caller	until a	grace
     period has	been detected, according to the	semantics of epoch reclama-
     tion.  Any	objects	requiring safe memory reclamation which	are logically
     deleted are safe for physical deletion following a	call to
     ck_epoch_synchronize(3).  If you require that all callbacks be dis-
     patched, then it is suggested that	you use	ck_epoch_barrier(3) instead or
     follow a call of ck_epoch_synchronize(3) with ck_epoch_reclaim(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_synchronize(record);

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

RETURN VALUES
     This function has no return value.

ERRORS
     The object	pointed	to by .Fa 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_reclaim(3),
     ck_epoch_barrier(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_synchronize&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help