From f69c955c28b7e5c2eaf4af036cb88480a8e433f3 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 21 Feb 2011 15:50:59 -0500 Subject: New dmnsn_execute_concurrently internal API. This gets all pthread code out of raytrace.c. --- libdimension/threads.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libdimension/threads.h') diff --git a/libdimension/threads.h b/libdimension/threads.h index 7ae6288..fdf2df7 100644 --- a/libdimension/threads.h +++ b/libdimension/threads.h @@ -33,6 +33,16 @@ */ typedef int dmnsn_thread_fn(void *ptr); +/** + * Thread callback type for parallel tasks. + * @param[in,out] ptr An arbitrary pointer. + * @param[in] thread An ID for this thread, in [0, \p nthreads). + * @param[in] nthreads The number of concurrent threads. + * @return 0 on success, non-zero on failure. + */ +typedef int dmnsn_concurrent_thread_fn(void *ptr, unsigned int thread, + unsigned int nthreads); + /** * Create a thread that cleans up after itself on errors. * @param[in,out] progress The progress object to associate with the thread. @@ -42,4 +52,14 @@ typedef int dmnsn_thread_fn(void *ptr); void dmnsn_new_thread(dmnsn_progress *progress, dmnsn_thread_fn *thread_fn, void *arg); +/** + * Run \p nthreads threads in parallel. + * @param[in] thread_fn The routine to run in each concurrent thread. + * @param[in,out] arg The pointer to pass to the thread callbacks. + * @param[in] nthreads The number of concurrent threads to run. + * @return 0 if all threads were successful, and an error code otherwise. + */ +int dmnsn_execute_concurrently(dmnsn_concurrent_thread_fn *thread_fn, + void *arg, unsigned int nthreads); + #endif /* DIMENSION_IMPL_THREADS_H */ -- cgit v1.2.3