diff options
author | Martin Poirier <theeth@yahoo.com> | 2008-08-17 02:47:33 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2008-08-17 02:47:33 +0400 |
commit | e0722e092340e1650070e6eadb32706df4a7fd4f (patch) | |
tree | 629c1780ee0d7b2f8f7d71217bdeaa072d59aa81 /source/blender/blenlib/BLI_threads.h | |
parent | cc3b41b3cd07152ab5f63ea4c6005cc3d11f2d2a (diff) |
ThreadedWorker
New functions to easily dispatch work to a limited number of thread, transparently.
NOTE: Could be merged in trunk, if needed.
Diffstat (limited to 'source/blender/blenlib/BLI_threads.h')
-rw-r--r-- | source/blender/blenlib/BLI_threads.h | 24 |
1 files changed, 23 insertions, 1 deletions
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 |