root/opal/mca/pmix/pmix4x/pmix/src/threads/tsd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. pmix_tsd_key_delete
  2. pmix_tsd_setspecific
  3. pmix_tsd_getspecific

   1 /*
   2  * Copyright (c) 2007-2013 Los Alamos National Security, LLC.  All rights
   3  *                         reserved.
   4  * Copyright (c) 2008      Cisco Systems, Inc.  All rights reserved.
   5  * Copyright (c) 2015-2017 Research Organization for Information Science
   6  *                         and Technology (RIST). All rights reserved.
   7  * Copyright (c) 2017-2018 Intel, Inc. All rights reserved.
   8  * $COPYRIGHT$
   9  *
  10  * Additional copyrights may follow
  11  *
  12  * $HEADER$
  13  */
  14 
  15 
  16 #ifndef PMIX_THREADS_TSD_H
  17 #define PMIX_THREADS_TSD_H
  18 
  19 #include "pmix_config.h"
  20 
  21 #include <pthread.h>
  22 
  23 #include "pmix_common.h"
  24 
  25 BEGIN_C_DECLS
  26 
  27 /**
  28  * @file
  29  *
  30  * Thread Specific Datastore Interface
  31  *
  32  * Functions for providing thread-specific datastore capabilities.
  33  */
  34 
  35 
  36 /**
  37  * Prototype for callback when tsd data is being destroyed
  38  */
  39 typedef void (*pmix_tsd_destructor_t)(void *value);
  40 
  41 
  42 typedef pthread_key_t pmix_tsd_key_t;
  43 
  44 static inline int
  45 pmix_tsd_key_delete(pmix_tsd_key_t key)
  46 {
  47     return pthread_key_delete(key);
  48 }
  49 
  50 static inline int
  51 pmix_tsd_setspecific(pmix_tsd_key_t key, void *value)
  52 {
  53     return pthread_setspecific(key, value);
  54 }
  55 
  56 static inline int
  57 pmix_tsd_getspecific(pmix_tsd_key_t key, void **valuep)
  58 {
  59     *valuep = pthread_getspecific(key);
  60     return PMIX_SUCCESS;
  61 }
  62 
  63 /**
  64  * Create thread-specific data key
  65  *
  66  * Create a thread-specific data key visible to all threads in the
  67  * current process.  The returned key is valid in all threads,
  68  * although the values bound to the key by pmix_tsd_setspecific() are
  69  * allocated on a per-thread basis and persist for the life of the
  70  * calling thread.
  71  *
  72  * Upon key creation, the value NULL is associated with the new key in
  73  * all active threads.  When a new thread is created, the value NULL
  74  * is associated with all defined keys in the new thread.
  75  *
  76  * The destructor parameter may be NULL.  At thread exit, if
  77  * destructor is non-NULL AND the thread has a non-NULL value
  78  * associated with the key, the function is called with the current
  79  * value as its argument.
  80  *
  81  * @param key[out]       The key for accessing thread-specific data
  82  * @param destructor[in] Cleanup function to call when a thread exits
  83  *
  84  * @retval PMIX_SUCCESS  Success
  85  * @retval EAGAIN        The system lacked the necessary resource to
  86  *                       create another thread specific data key
  87  * @retval ENOMEM        Insufficient memory exists to create the key
  88  */
  89 PMIX_EXPORT int pmix_tsd_key_create(pmix_tsd_key_t *key,
  90                                       pmix_tsd_destructor_t destructor);
  91 
  92 
  93 /**
  94  * Destruct all thread-specific data keys
  95  *
  96  * Destruct all thread-specific data keys and invoke the destructor
  97  *
  98  * This should only be invoked in the main thread.
  99  * This is made necessary since destructors are not invoked on the
 100  * keys of the main thread, since there is no such thing as
 101  * pthread_join(main_thread)
 102  *
 103  * @retval PMIX_SUCCESS  Success
 104  */
 105 PMIX_EXPORT int pmix_tsd_keys_destruct(void);
 106 
 107 END_C_DECLS
 108 
 109 #endif /* PMIX_MTHREADS_TSD_H */

/* [<][>][^][v][top][bottom][index][help] */