source: rtems/cpukit/posix/include/rtems/posix/key.h @ 5eaf0e7

5
Last change on this file since 5eaf0e7 was 5eaf0e7, checked in by Sebastian Huber <sebastian.huber@…>, on 03/17/16 at 06:56:31

posix: Use per-thread lookup tree for POSIX Keys

Yields higher performance on SMP systems.

Close #2625.

  • Property mode set to 100644
File size: 1.8 KB
Line 
1/**
2 * @file
3 *
4 * @brief POSIX Key Private Support
5 *
6 * This include file contains all the private support information for
7 * POSIX key.
8 */
9
10/*
11 * Copyright (c) 2012 Zhongwei Yao.
12 * COPYRIGHT (c) 1989-2011.
13 * On-Line Applications Research Corporation (OAR).
14 * Copyright (c) 2016 embedded brains GmbH.
15 *
16 * The license and distribution terms for this file may be
17 * found in the file LICENSE in this distribution or at
18 * http://www.rtems.org/license/LICENSE.
19 */
20
21#ifndef _RTEMS_POSIX_KEY_H
22#define _RTEMS_POSIX_KEY_H
23
24#include <pthread.h>
25
26#include <rtems/score/chain.h>
27#include <rtems/score/object.h>
28#include <rtems/score/rbtree.h>
29#include <rtems/score/thread.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35/**
36 * @defgroup POSIX_KEY POSIX Key
37 *
38 * @ingroup POSIXAPI
39 *
40 */
41/**@{**/
42
43/**
44 * @brief Represents POSIX key and value pair.
45 */
46typedef struct {
47  /**
48   * @brief The chain node for the key value pairs chain in POSIX_Keys_Control.
49   */
50  Chain_Node Key_node;
51
52  /**
53   * @brief The tree node for the lookup tree in Thread_Keys_information.
54   */
55  RBTree_Node Lookup_node;
56
57  /**
58   * @brief The POSIX key identifier used as the tree key.
59   */
60  pthread_key_t key;
61
62  /**
63   * @brief The corresponding thread.
64   */
65  Thread_Control *thread;
66
67  /**
68   * @brief The thread specific POSIX key value.
69   */
70  void *value;
71} POSIX_Keys_Key_value_pair;
72
73/**
74 * @brief The data structure used to manage a POSIX key.
75 */
76typedef struct {
77   /** This field is the Object control structure. */
78   Objects_Control     Object;
79   /** This field is the data destructor. */
80   void (*destructor) (void *);
81
82   /**
83    * @brief Key value pairs of this key.
84    */
85   Chain_Control Key_value_pairs;
86 }  POSIX_Keys_Control;
87
88/** @} */
89
90#ifdef __cplusplus
91}
92#endif
93
94#endif
95/*  end of include file */
Note: See TracBrowser for help on using the repository browser.