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 reclama-
       tion.  Any objects requiring safe memory	reclamation  which  are	 logi-
       cally  deleted  are  safe  for  physical	 deletion  following a call to
       ck_epoch_barrier(3). This function will also dispatch all callbacks as-
       sociated	  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+14.3.quarterly>

home | help