#include <concurrent_object_pool.h>
template<typename T>
class apollo::cyber::base::CCObjectPool< T >
在文件 concurrent_object_pool.h 第 36 行定义.
◆ CCObjectPool()
在文件 concurrent_object_pool.h 第 73 行定义.
75 FOR_EACH(i, 0, capacity_ - 1) { node_arena_[i].next = node_arena_ + 1 + i; }
76 node_arena_[capacity_ - 1].next = nullptr;
77 free_head_.store({0, node_arena_}, std::memory_order_relaxed);
78}
void * CheckedCalloc(size_t num, size_t size)
#define FOR_EACH(i, begin, end)
◆ ~CCObjectPool()
◆ ConstructAll()
template<typename T >
template<typename... Args>
◆ ConstructObject()
template<typename T >
template<typename... Args>
在文件 concurrent_object_pool.h 第 123 行定义.
123 {
124 Head free_head;
126 return nullptr;
127 }
128 auto self = this->shared_from_this();
129 T *ptr = new (free_head.node) T(std::forward<Args>(args)...);
130 return std::shared_ptr<T>(ptr, [self](T *object) {
131 object->~T();
132 self->ReleaseObject(object);
133 });
134}
#define cyber_unlikely(x)
◆ GetObject()
在文件 concurrent_object_pool.h 第 111 行定义.
111 {
112 Head free_head;
114 return nullptr;
115 }
116 auto self = this->shared_from_this();
117 return std::shared_ptr<T>(reinterpret_cast<T *>(free_head.node),
118 [self](T *object) { self->ReleaseObject(object); });
119}
◆ ReleaseObject()
在文件 concurrent_object_pool.h 第 137 行定义.
137 {
138 Head new_head;
139 Node *node =
reinterpret_cast<Node *
>(object);
140 Head old_head = free_head_.load(std::memory_order_acquire);
141 do {
142 node->next = old_head.node;
143 new_head.node = node;
144 new_head.count = old_head.count + 1;
145 } while (!free_head_.compare_exchange_weak(old_head, new_head,
146 std::memory_order_acq_rel,
147 std::memory_order_acquire));
148}
◆ size()
该类的文档由以下文件生成: