Blender
V3.3
|
Go to the source code of this file.
Classes | |
struct | BLI_mempool_threadsafe_iter |
struct | ParallelMempoolTaskData |
Typedefs | |
typedef struct BLI_mempool_threadsafe_iter | BLI_mempool_threadsafe_iter |
typedef struct ParallelMempoolTaskData | ParallelMempoolTaskData |
Functions | |
ParallelMempoolTaskData * | mempool_iter_threadsafe_create (BLI_mempool *pool, size_t iter_num) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() |
void | mempool_iter_threadsafe_destroy (ParallelMempoolTaskData *iter_arr) ATTR_NONNULL() |
void * | mempool_iter_threadsafe_step (BLI_mempool_threadsafe_iter *iter) |
Shared logic for BLI_task_parallel_mempool to create a threaded iterator, without exposing the these functions publicly.
Definition in file BLI_mempool_private.h.
typedef struct BLI_mempool_threadsafe_iter BLI_mempool_threadsafe_iter |
typedef struct ParallelMempoolTaskData ParallelMempoolTaskData |
ParallelMempoolTaskData* mempool_iter_threadsafe_create | ( | BLI_mempool * | pool, |
size_t | iter_num | ||
) |
Initialize an array of mempool iterators, BLI_MEMPOOL_ALLOW_ITER flag must be set.
This is used in threaded code, to generate as much iterators as needed (each task should have its own), such that each iterator goes over its own single chunk, and only getting the next chunk to iterate over has to be protected against concurrency (which can be done in a lock-less way).
To be used when creating a task for each single item in the pool is totally overkill.
See BLI_task_parallel_mempool implementation for detailed usage example.
Definition at line 513 of file BLI_mempool.c.
References BLI_assert, BLI_MEMPOOL_ALLOW_ITER, BLI_mempool_iter::curchunk, BLI_mempool_threadsafe_iter::curchunk_threaded_shared, BLI_mempool_threadsafe_iter::iter, MEM_mallocN, mempool_threadsafe_iternew(), NULL, blender::compositor::pool, and ParallelMempoolTaskData::ts_iter.
Referenced by BLI_task_parallel_mempool().
void mempool_iter_threadsafe_destroy | ( | ParallelMempoolTaskData * | iter_arr | ) |
Definition at line 533 of file BLI_mempool.c.
References BLI_assert, BLI_mempool_threadsafe_iter::curchunk_threaded_shared, MEM_freeN, NULL, and ParallelMempoolTaskData::ts_iter.
Referenced by BLI_task_parallel_mempool().
void* mempool_iter_threadsafe_step | ( | BLI_mempool_threadsafe_iter * | iter | ) |
A version of BLI_mempool_iterstep that uses BLI_mempool_threadsafe_iter.curchunk_threaded_shared for threaded iteration support. (threaded section noted in comments).
Definition at line 605 of file BLI_mempool.c.
References atomic_cas_ptr(), CHUNK_DATA, BLI_mempool_iter::curchunk, BLI_mempool_threadsafe_iter::curchunk_threaded_shared, BLI_mempool_iter::curindex, BLI_mempool::esize, FREEWORD, BLI_mempool_threadsafe_iter::iter, BLI_mempool_chunk::next, NULL, BLI_mempool::pchunk, POINTER_OFFSET, BLI_mempool_iter::pool, ret, and UNLIKELY.
Referenced by parallel_mempool_func().