summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/thread.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-17 07:56:31 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-18 07:43:46 +0100
commit5eaf0e7458bac80ba669f03c4feaae5bad55c6c9 (patch)
treea6ed26d6617c2b1c2503df1607443e966d875897 /cpukit/score/include/rtems/score/thread.h
parentscore: Destroy thread timer lock (diff)
downloadrtems-5eaf0e7458bac80ba669f03c4feaae5bad55c6c9.tar.bz2
posix: Use per-thread lookup tree for POSIX Keys
Yields higher performance on SMP systems. Close #2625.
Diffstat (limited to 'cpukit/score/include/rtems/score/thread.h')
-rw-r--r--cpukit/score/include/rtems/score/thread.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
index 44b706d7ff..4e0d8cf6f9 100644
--- a/cpukit/score/include/rtems/score/thread.h
+++ b/cpukit/score/include/rtems/score/thread.h
@@ -487,6 +487,21 @@ struct Thread_Action {
};
/**
+ * @brief Per-thread information for POSIX Keys.
+ */
+typedef struct {
+ /**
+ * @brief Key value pairs registered for this thread.
+ */
+ RBTree_Control Key_value_pairs;
+
+ /**
+ * @brief Lock to protect the tree operations.
+ */
+ ISR_LOCK_MEMBER( Lock )
+} Thread_Keys_information;
+
+/**
* @brief Control block to manage thread actions.
*
* Use _Thread_Action_control_initialize() to initialize this structure.
@@ -837,13 +852,9 @@ struct _Thread_Control {
#endif
/**
- * This is the thread key value chain's control, which is used
- * to track all key value for specific thread, and when thread
- * exits, we can remove all key value for specific thread by
- * iterating this chain, or we have to search a whole rbtree,
- * which is inefficient.
+ * @brief The POSIX Keys information.
*/
- Chain_Control Key_Chain;
+ Thread_Keys_information Keys;
/**
* @brief Thread life-cycle control.