Blender  V2.93
Macros | Typedefs | Enumerations | Functions
BLI_threads.h File Reference
#include <pthread.h>
#include "BLI_sys_types.h"

Go to the source code of this file.

Macros

#define BLENDER_MAX_THREADS   1024
 
#define BLI_MUTEX_INITIALIZER   PTHREAD_MUTEX_INITIALIZER
 
#define THREAD_LOCK_READ   1
 
#define THREAD_LOCK_WRITE   2
 
#define BLI_RWLOCK_INITIALIZER   PTHREAD_RWLOCK_INITIALIZER
 
#define ThreadLocal(type)   __thread type
 
#define BLI_thread_local_create(name)
 
#define BLI_thread_local_delete(name)
 
#define BLI_thread_local_get(name)   name
 
#define BLI_thread_local_set(name, value)   name = value
 

Typedefs

typedef pthread_mutex_t ThreadMutex
 
typedef pthread_spinlock_t SpinLock
 
typedef pthread_rwlock_t ThreadRWMutex
 
typedef struct TicketMutex TicketMutex
 
typedef pthread_cond_t ThreadCondition
 
typedef struct ThreadQueue ThreadQueue
 

Enumerations

enum  {
  LOCK_IMAGE = 0 , LOCK_DRAW_IMAGE , LOCK_VIEWER , LOCK_CUSTOM1 ,
  LOCK_NODES , LOCK_MOVIECLIP , LOCK_COLORMANAGE , LOCK_FFTW ,
  LOCK_VIEW3D
}
 

Functions

void BLI_threadapi_init (void)
 
void BLI_threadapi_exit (void)
 
void BLI_threadpool_init (struct ListBase *threadbase, void *(*do_thread)(void *), int tot)
 
int BLI_available_threads (struct ListBase *threadbase)
 
int BLI_threadpool_available_thread_index (struct ListBase *threadbase)
 
void BLI_threadpool_insert (struct ListBase *threadbase, void *callerdata)
 
void BLI_threadpool_remove (struct ListBase *threadbase, void *callerdata)
 
void BLI_threadpool_remove_index (struct ListBase *threadbase, int index)
 
void BLI_threadpool_clear (struct ListBase *threadbase)
 
void BLI_threadpool_end (struct ListBase *threadbase)
 
int BLI_thread_is_main (void)
 
int BLI_system_thread_count (void)
 
void BLI_system_num_threads_override_set (int num)
 
int BLI_system_num_threads_override_get (void)
 
void BLI_thread_lock (int type)
 
void BLI_thread_unlock (int type)
 
void BLI_mutex_init (ThreadMutex *mutex)
 
void BLI_mutex_end (ThreadMutex *mutex)
 
ThreadMutexBLI_mutex_alloc (void)
 
void BLI_mutex_free (ThreadMutex *mutex)
 
void BLI_mutex_lock (ThreadMutex *mutex)
 
bool BLI_mutex_trylock (ThreadMutex *mutex)
 
void BLI_mutex_unlock (ThreadMutex *mutex)
 
void BLI_spin_init (SpinLock *spin)
 
void BLI_spin_lock (SpinLock *spin)
 
void BLI_spin_unlock (SpinLock *spin)
 
void BLI_spin_end (SpinLock *spin)
 
void BLI_rw_mutex_init (ThreadRWMutex *mutex)
 
void BLI_rw_mutex_end (ThreadRWMutex *mutex)
 
ThreadRWMutexBLI_rw_mutex_alloc (void)
 
void BLI_rw_mutex_free (ThreadRWMutex *mutex)
 
void BLI_rw_mutex_lock (ThreadRWMutex *mutex, int mode)
 
void BLI_rw_mutex_unlock (ThreadRWMutex *mutex)
 
TicketMutexBLI_ticket_mutex_alloc (void)
 
void BLI_ticket_mutex_free (TicketMutex *ticket)
 
void BLI_ticket_mutex_lock (TicketMutex *ticket)
 
void BLI_ticket_mutex_unlock (TicketMutex *ticket)
 
void BLI_condition_init (ThreadCondition *cond)
 
void BLI_condition_wait (ThreadCondition *cond, ThreadMutex *mutex)
 
void BLI_condition_wait_global_mutex (ThreadCondition *cond, const int type)
 
void BLI_condition_notify_one (ThreadCondition *cond)
 
void BLI_condition_notify_all (ThreadCondition *cond)
 
void BLI_condition_end (ThreadCondition *cond)
 
ThreadQueueBLI_thread_queue_init (void)
 
void BLI_thread_queue_free (ThreadQueue *queue)
 
void BLI_thread_queue_push (ThreadQueue *queue, void *work)
 
void * BLI_thread_queue_pop (ThreadQueue *queue)
 
void * BLI_thread_queue_pop_timeout (ThreadQueue *queue, int ms)
 
int BLI_thread_queue_len (ThreadQueue *queue)
 
bool BLI_thread_queue_is_empty (ThreadQueue *queue)
 
void BLI_thread_queue_wait_finish (ThreadQueue *queue)
 
void BLI_thread_queue_nowait (ThreadQueue *queue)
 
void BLI_thread_put_process_on_fast_node (void)
 
void BLI_thread_put_thread_on_fast_node (void)
 

Macro Definition Documentation

◆ BLENDER_MAX_THREADS

#define BLENDER_MAX_THREADS   1024

Definition at line 35 of file BLI_threads.h.

◆ BLI_MUTEX_INITIALIZER

#define BLI_MUTEX_INITIALIZER   PTHREAD_MUTEX_INITIALIZER

Definition at line 84 of file BLI_threads.h.

◆ BLI_RWLOCK_INITIALIZER

#define BLI_RWLOCK_INITIALIZER   PTHREAD_RWLOCK_INITIALIZER

Definition at line 124 of file BLI_threads.h.

◆ BLI_thread_local_create

#define BLI_thread_local_create (   name)

Definition at line 192 of file BLI_threads.h.

◆ BLI_thread_local_delete

#define BLI_thread_local_delete (   name)

Definition at line 193 of file BLI_threads.h.

◆ BLI_thread_local_get

#define BLI_thread_local_get (   name)    name

Definition at line 194 of file BLI_threads.h.

◆ BLI_thread_local_set

#define BLI_thread_local_set (   name,
  value 
)    name = value

Definition at line 195 of file BLI_threads.h.

◆ THREAD_LOCK_READ

#define THREAD_LOCK_READ   1

Definition at line 121 of file BLI_threads.h.

◆ THREAD_LOCK_WRITE

#define THREAD_LOCK_WRITE   2

Definition at line 122 of file BLI_threads.h.

◆ ThreadLocal

#define ThreadLocal (   type)    __thread type

Definition at line 190 of file BLI_threads.h.

Typedef Documentation

◆ SpinLock

typedef pthread_spinlock_t SpinLock

Definition at line 111 of file BLI_threads.h.

◆ ThreadCondition

typedef pthread_cond_t ThreadCondition

Definition at line 151 of file BLI_threads.h.

◆ ThreadMutex

typedef pthread_mutex_t ThreadMutex

Definition at line 83 of file BLI_threads.h.

◆ ThreadQueue

typedef struct ThreadQueue ThreadQueue

Definition at line 158 of file BLI_threads.h.

◆ ThreadRWMutex

typedef pthread_rwlock_t ThreadRWMutex

Definition at line 126 of file BLI_threads.h.

◆ TicketMutex

typedef struct TicketMutex TicketMutex

Definition at line 135 of file BLI_threads.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Global Mutex Locks

One custom lock available now. can be extended.

Enumerator
LOCK_IMAGE 
LOCK_DRAW_IMAGE 
LOCK_VIEWER 
LOCK_CUSTOM1 
LOCK_NODES 
LOCK_MOVIECLIP 
LOCK_COLORMANAGE 
LOCK_FFTW 
LOCK_VIEW3D 

Definition at line 66 of file BLI_threads.h.

Function Documentation

◆ BLI_available_threads()

int BLI_available_threads ( struct ListBase threadbase)

Definition at line 193 of file threads.cc.

References LISTBASE_FOREACH.

Referenced by background_task_pool_run().

◆ BLI_condition_end()

void BLI_condition_end ( ThreadCondition cond)

◆ BLI_condition_init()

void BLI_condition_init ( ThreadCondition cond)

◆ BLI_condition_notify_all()

void BLI_condition_notify_all ( ThreadCondition cond)

Definition at line 622 of file threads.cc.

Referenced by IMB_thumb_path_unlock(), and write_result_func().

◆ BLI_condition_notify_one()

void BLI_condition_notify_one ( ThreadCondition cond)

Definition at line 617 of file threads.cc.

Referenced by seq_prefetch_resume(), and SEQ_prefetch_stop().

◆ BLI_condition_wait()

void BLI_condition_wait ( ThreadCondition cond,
ThreadMutex mutex 
)

Definition at line 607 of file threads.cc.

References mutex.

Referenced by schedule_write_result(), screen_opengl_render_end(), and seq_prefetch_do_suspend().

◆ BLI_condition_wait_global_mutex()

void BLI_condition_wait_global_mutex ( ThreadCondition cond,
const int  type 
)

Definition at line 612 of file threads.cc.

References global_mutex_from_type(), and type.

Referenced by IMB_thumb_path_lock().

◆ BLI_mutex_alloc()

ThreadMutex* BLI_mutex_alloc ( void  )

◆ BLI_mutex_end()

void BLI_mutex_end ( ThreadMutex mutex)

◆ BLI_mutex_free()

void BLI_mutex_free ( ThreadMutex mutex)

Definition at line 428 of file threads.cc.

References BLI_mutex_end(), MEM_freeN, and mutex.

Referenced by BKE_images_exit(), EEVEE_lightbake_job_data_free(), and free_preview_job().

◆ BLI_mutex_init()

void BLI_mutex_init ( ThreadMutex mutex)

◆ BLI_mutex_lock()

void BLI_mutex_lock ( ThreadMutex mutex)

Definition at line 401 of file threads.cc.

References mutex.

Referenced by BKE_collection_object_cache_get(), BKE_collection_object_cache_instanced_get(), BKE_image_acquire_ibuf(), BKE_image_ensure_viewer_views(), BKE_image_file_format_set(), BKE_image_free_anim_ibufs(), BKE_image_free_buffers_ex(), BKE_image_get_first_ibuf(), BKE_image_get_ibuf_with_name(), BKE_image_has_ibuf(), BKE_image_has_loaded_ibuf(), BKE_image_is_dirty_writable(), BKE_image_merge(), BKE_image_pool_acquire_ibuf(), BKE_image_pool_free(), BKE_image_release_ibuf(), BKE_image_signal(), BKE_mesh_runtime_looptri_ensure(), BKE_mesh_wrapper_ensure_mdata(), BKE_object_preview_geometry_set_add(), BKE_object_select_update(), BLI_spin_lock(), bvhcache_find(), ccgDM_copyFinalLoopArray(), colorspace_from_scene_linear_cpu_processor(), colorspace_to_scene_linear_cpu_processor(), COM_deinitialize(), COM_execute(), display_from_scene_linear_processor(), display_to_scene_linear_processor(), do_moviecache_put(), drw_deferred_shader_compilation_exec(), DRW_deferred_shader_remove(), eevee_lightbake_delete_resources(), EEVEE_lightbake_job_create(), evaluate_driver_python(), filelist_readjob_do(), filelist_readjob_startjob(), filelist_readjob_update(), blender::compositor::DenoiseOperation::generateDenoise(), give_parvert(), gpu_batch_presets_register(), gpu_batch_presets_unregister(), gpu_free_unused_buffers(), image_free_gpu(), image_mem_size(), IMB_colormanagement_color_picking_to_scene_linear_v3(), IMB_colormanagement_scene_linear_to_color_picking_v3(), imb_global_cache_get_tile(), IMB_moviecache_get(), IMB_moviecache_put_if_possible(), imb_tile_cache_tile_free(), IMB_tiles_to_rect(), blender::compositor::NodeOperation::lockMutex(), mesh_calc_modifiers(), preview_startjob(), RE_engine_update_render_passes(), RE_point_density_cache(), RE_point_density_sample(), schedule_write_result(), screen_opengl_render_end(), seq_cache_create(), seq_cache_get(), seq_cache_lock(), seq_cache_put(), seq_disk_cache_create(), seq_disk_cache_enforce_limits(), seq_disk_cache_invalidate(), seq_prefetch_do_suspend(), SEQ_render_give_ibuf(), sequencer_preview_add_sound(), view_layer_bases_hash_create(), and write_result_func().

◆ BLI_mutex_trylock()

bool BLI_mutex_trylock ( ThreadMutex mutex)

Definition at line 411 of file threads.cc.

References mutex.

◆ BLI_mutex_unlock()

void BLI_mutex_unlock ( ThreadMutex mutex)

Definition at line 406 of file threads.cc.

References mutex.

Referenced by BKE_collection_object_cache_get(), BKE_collection_object_cache_instanced_get(), BKE_image_acquire_ibuf(), BKE_image_ensure_viewer_views(), BKE_image_file_format_set(), BKE_image_free_anim_ibufs(), BKE_image_free_buffers_ex(), BKE_image_get_first_ibuf(), BKE_image_get_ibuf_with_name(), BKE_image_has_ibuf(), BKE_image_has_loaded_ibuf(), BKE_image_is_dirty_writable(), BKE_image_merge(), BKE_image_pool_acquire_ibuf(), BKE_image_pool_free(), BKE_image_release_ibuf(), BKE_image_signal(), BKE_mesh_runtime_looptri_ensure(), BKE_mesh_wrapper_ensure_mdata(), BKE_object_preview_geometry_set_add(), BKE_object_select_update(), BLI_spin_unlock(), bvhcache_find(), bvhcache_unlock(), ccgDM_copyFinalLoopArray(), colorspace_from_scene_linear_cpu_processor(), colorspace_to_scene_linear_cpu_processor(), COM_deinitialize(), COM_execute(), display_from_scene_linear_processor(), display_to_scene_linear_processor(), do_moviecache_put(), drw_deferred_shader_compilation_exec(), DRW_deferred_shader_remove(), eevee_lightbake_delete_resources(), EEVEE_lightbake_job_create(), evaluate_driver_python(), filelist_readjob_do(), filelist_readjob_startjob(), filelist_readjob_update(), blender::compositor::DenoiseOperation::generateDenoise(), give_parvert(), gpu_batch_presets_register(), gpu_batch_presets_unregister(), gpu_free_unused_buffers(), image_free_gpu(), image_mem_size(), IMB_colormanagement_color_picking_to_scene_linear_v3(), IMB_colormanagement_scene_linear_to_color_picking_v3(), imb_global_cache_get_tile(), IMB_moviecache_get(), IMB_moviecache_put_if_possible(), imb_tile_cache_tile_free(), IMB_tiles_to_rect(), mesh_calc_modifiers(), preview_startjob(), RE_engine_update_render_passes(), RE_point_density_cache(), RE_point_density_sample(), schedule_write_result(), screen_opengl_render_end(), seq_cache_create(), seq_cache_get(), seq_cache_put(), seq_cache_unlock(), seq_disk_cache_create(), seq_disk_cache_enforce_limits(), seq_disk_cache_invalidate(), seq_prefetch_do_suspend(), SEQ_render_give_ibuf(), sequencer_preview_add_sound(), blender::compositor::NodeOperation::unlockMutex(), view_layer_bases_hash_create(), and write_result_func().

◆ BLI_rw_mutex_alloc()

ThreadRWMutex* BLI_rw_mutex_alloc ( void  )

◆ BLI_rw_mutex_end()

void BLI_rw_mutex_end ( ThreadRWMutex mutex)

Definition at line 531 of file threads.cc.

References mutex.

Referenced by BLI_rw_mutex_free(), ccgDM_release(), and RE_FreeRender().

◆ BLI_rw_mutex_free()

void BLI_rw_mutex_free ( ThreadRWMutex mutex)

Definition at line 544 of file threads.cc.

References BLI_rw_mutex_end(), MEM_freeN, and mutex.

Referenced by BKE_fluid_modifier_freeDomain().

◆ BLI_rw_mutex_init()

void BLI_rw_mutex_init ( ThreadRWMutex mutex)

Definition at line 511 of file threads.cc.

References mutex.

Referenced by BLI_rw_mutex_alloc(), getCCGDerivedMesh(), and RE_NewRender().

◆ BLI_rw_mutex_lock()

void BLI_rw_mutex_lock ( ThreadRWMutex mutex,
int  mode 
)

◆ BLI_rw_mutex_unlock()

void BLI_rw_mutex_unlock ( ThreadRWMutex mutex)

◆ BLI_spin_end()

void BLI_spin_end ( SpinLock spin)

◆ BLI_spin_init()

void BLI_spin_init ( SpinLock spin)

◆ BLI_spin_lock()

void BLI_spin_lock ( SpinLock spin)

◆ BLI_spin_unlock()

void BLI_spin_unlock ( SpinLock spin)

◆ BLI_system_num_threads_override_get()

int BLI_system_num_threads_override_get ( void  )

Definition at line 350 of file threads.cc.

References num_threads_override.

Referenced by BKE_render_num_threads(), and BLI_task_scheduler_init().

◆ BLI_system_num_threads_override_set()

void BLI_system_num_threads_override_set ( int  num)

Definition at line 345 of file threads.cc.

References num_threads_override.

Referenced by arg_handle_threads_set().

◆ BLI_system_thread_count()

int BLI_system_thread_count ( void  )

◆ BLI_thread_is_main()

int BLI_thread_is_main ( void  )

◆ BLI_thread_lock()

void BLI_thread_lock ( int  type)

◆ BLI_thread_put_process_on_fast_node()

void BLI_thread_put_process_on_fast_node ( void  )

Definition at line 902 of file threads.cc.

Referenced by main().

◆ BLI_thread_put_thread_on_fast_node()

void BLI_thread_put_thread_on_fast_node ( void  )

Definition at line 918 of file threads.cc.

Referenced by do_job_thread().

◆ BLI_thread_queue_free()

void BLI_thread_queue_free ( ThreadQueue queue)

◆ BLI_thread_queue_init()

ThreadQueue* BLI_thread_queue_init ( void  )

◆ BLI_thread_queue_is_empty()

bool BLI_thread_queue_is_empty ( ThreadQueue queue)

◆ BLI_thread_queue_len()

int BLI_thread_queue_len ( ThreadQueue queue)

◆ BLI_thread_queue_nowait()

void BLI_thread_queue_nowait ( ThreadQueue queue)

◆ BLI_thread_queue_pop()

void* BLI_thread_queue_pop ( ThreadQueue queue)

◆ BLI_thread_queue_pop_timeout()

void* BLI_thread_queue_pop_timeout ( ThreadQueue queue,
int  ms 
)

◆ BLI_thread_queue_push()

void BLI_thread_queue_push ( ThreadQueue queue,
void *  work 
)

◆ BLI_thread_queue_wait_finish()

void BLI_thread_queue_wait_finish ( ThreadQueue queue)

◆ BLI_thread_unlock()

void BLI_thread_unlock ( int  type)

◆ BLI_threadapi_exit()

void BLI_threadapi_exit ( void  )

◆ BLI_threadapi_init()

void BLI_threadapi_init ( void  )

◆ BLI_threadpool_available_thread_index()

int BLI_threadpool_available_thread_index ( struct ListBase threadbase)

Definition at line 207 of file threads.cc.

References LISTBASE_FOREACH.

◆ BLI_threadpool_clear()

void BLI_threadpool_clear ( struct ListBase threadbase)

Definition at line 278 of file threads.cc.

References LISTBASE_FOREACH.

Referenced by background_task_pool_work_and_wait().

◆ BLI_threadpool_end()

void BLI_threadpool_end ( struct ListBase threadbase)

◆ BLI_threadpool_init()

void BLI_threadpool_init ( struct ListBase threadbase,
void *(*)(void *)  do_thread,
int  tot 
)

◆ BLI_threadpool_insert()

void BLI_threadpool_insert ( struct ListBase threadbase,
void *  callerdata 
)

◆ BLI_threadpool_remove()

void BLI_threadpool_remove ( struct ListBase threadbase,
void *  callerdata 
)

◆ BLI_threadpool_remove_index()

void BLI_threadpool_remove_index ( struct ListBase threadbase,
int  index 
)

Definition at line 263 of file threads.cc.

References LISTBASE_FOREACH.

◆ BLI_ticket_mutex_alloc()

TicketMutex* BLI_ticket_mutex_alloc ( void  )

Definition at line 558 of file threads.cc.

References TicketMutex::cond, MEM_callocN, and TicketMutex::mutex.

Referenced by DRW_opengl_context_create(), and WM_jobs_get().

◆ BLI_ticket_mutex_free()

void BLI_ticket_mutex_free ( TicketMutex ticket)

Definition at line 569 of file threads.cc.

References TicketMutex::cond, MEM_freeN, and TicketMutex::mutex.

Referenced by DRW_opengl_context_destroy(), and wm_job_free().

◆ BLI_ticket_mutex_lock()

void BLI_ticket_mutex_lock ( TicketMutex ticket)

◆ BLI_ticket_mutex_unlock()

void BLI_ticket_mutex_unlock ( TicketMutex ticket)