ck_epoch_synchronize man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

CK_EPOCH_SYNCHRONIZE(3)	 BSD Library Functions Manual  CK_EPOCH_SYNCHRONIZE(3)

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
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net