From e0722e092340e1650070e6eadb32706df4a7fd4f Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sat, 16 Aug 2008 22:47:33 +0000 Subject: ThreadedWorker New functions to easily dispatch work to a limited number of thread, transparently. NOTE: Could be merged in trunk, if needed. --- source/blender/blenlib/BLI_threads.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'source/blender/blenlib/BLI_threads.h') diff --git a/source/blender/blenlib/BLI_threads.h b/source/blender/blenlib/BLI_threads.h index 386dc7ab1ef..92bcd6798a0 100644 --- a/source/blender/blenlib/BLI_threads.h +++ b/source/blender/blenlib/BLI_threads.h @@ -39,7 +39,6 @@ #define BLENDER_MAX_THREADS 8 struct ListBase; - void BLI_init_threads (struct ListBase *threadbase, void *(*do_thread)(void *), int tot); int BLI_available_threads(struct ListBase *threadbase); int BLI_available_thread_index(struct ListBase *threadbase); @@ -52,5 +51,28 @@ void BLI_lock_thread (int type); void BLI_unlock_thread (int type); int BLI_system_thread_count( void ); /* gets the number of threads the system can make use of */ + +/* ThreadedWorker is a simple tool for dispatching work to a limited number of threads in a transparent + * fashion from the caller's perspective + * */ + +struct ThreadedWorker; + +/* Create a new worker supporting tot parallel threads. + * When new work in inserted and all threads are busy, sleep(sleep_time) before checking again + */ +struct ThreadedWorker *BLI_create_worker(void *(*do_thread)(void *), int tot, int sleep_time); + +/* join all working threads */ +void BLI_end_worker(struct ThreadedWorker *worker); + +/* also ends all working threads */ +void BLI_destroy_worker(struct ThreadedWorker *worker); + +/* Spawns a new work thread if possible, sleeps until one is available otherwise + * NOTE: inserting work is NOT thread safe, so make sure it is only done from one thread */ +void BLI_insert_work(struct ThreadedWorker *worker, void *param); + + #endif -- cgit v1.2.3