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

FreeBSD Manual Pages

  
 
  

home | help
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
       reclamation.   It is not	safe to	call this function on a	record that is
       in an active section.  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
       dispatched,  then  it is	suggested that you use ck_epoch_barrier(3) in-
       stead   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, 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_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	regis-
       tered 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       CK_EPOCH_SYNCHRONIZE(3)

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

home | help