Blender  V3.3
Classes | Typedefs | Functions
BLI_mempool_private.h File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_mempool.h"
#include "BLI_task.h"

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

ParallelMempoolTaskDatamempool_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()
 
voidmempool_iter_threadsafe_step (BLI_mempool_threadsafe_iter *iter)
 

Detailed Description

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 Documentation

◆ BLI_mempool_threadsafe_iter

◆ ParallelMempoolTaskData

Function Documentation

◆ mempool_iter_threadsafe_create()

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().

◆ mempool_iter_threadsafe_destroy()

void mempool_iter_threadsafe_destroy ( ParallelMempoolTaskData iter_arr)

◆ mempool_iter_threadsafe_step()

void* mempool_iter_threadsafe_step ( BLI_mempool_threadsafe_iter iter)