diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2010-06-09 13:54:08 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2010-06-09 13:54:08 -0500 |
commit | cbbd9e5b225e743ee3b4688ac6a3b69a9876926a (patch) | |
tree | ac9ccc37c35855edeeecbf3ebe1cb55d3c2f6f89 /src/include | |
parent | 9a4698af6ee4c095a97b8800d2d5f0a4bb282b15 (diff) | |
download | talos-hostboot-cbbd9e5b225e743ee3b4688ac6a3b69a9876926a.tar.gz talos-hostboot-cbbd9e5b225e743ee3b4688ac6a3b69a9876926a.zip |
Refactor task-manager tid counter to generic lockfree algorithm.
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/kernel/taskmgr.H | 6 | ||||
-rw-r--r-- | src/include/util/lockfree/counter.H | 23 |
2 files changed, 26 insertions, 3 deletions
diff --git a/src/include/kernel/taskmgr.H b/src/include/kernel/taskmgr.H index 2bdb39c16..3cf036f37 100644 --- a/src/include/kernel/taskmgr.H +++ b/src/include/kernel/taskmgr.H @@ -2,6 +2,7 @@ #define __KENREL_TASKMGR_H #include <kernel/types.h> +#include <util/lockfree/counter.H> class TaskManager { @@ -20,9 +21,8 @@ class TaskManager static task_t* createIdleTask(); private: - tid_t getNextTid(); - - tid_t iv_nextTid; + tid_t getNextTid() { return iv_nextTid.next(); }; + Util::Lockfree::Counter<tid_t> iv_nextTid; static void idleTaskLoop(void*); task_t* _createIdleTask(); diff --git a/src/include/util/lockfree/counter.H b/src/include/util/lockfree/counter.H new file mode 100644 index 000000000..1ff61fc77 --- /dev/null +++ b/src/include/util/lockfree/counter.H @@ -0,0 +1,23 @@ +#ifndef __UTIL_LOCKFREE_COUNTER_H +#define __UTIL_LOCKFREE_COUNTER_H + +namespace Util +{ + namespace Lockfree + { + template <typename _T> + class Counter + { + public: + Counter() : value(_T()) {}; + + _T next() { return __sync_fetch_and_add(&value, 1); }; + + private: + _T value; + }; + }; +}; + + +#endif |