1 #ifndef KVM__THREADPOOL_H 2 #define KVM__THREADPOOL_H 3 4 #include "kvm/mutex.h" 5 6 #include <linux/list.h> 7 8 struct kvm; 9 10 typedef void (*kvm_thread_callback_fn_t)(struct kvm *kvm, void *data); 11 12 struct thread_pool__job { 13 kvm_thread_callback_fn_t callback; 14 struct kvm *kvm; 15 void *data; 16 17 int signalcount; 18 pthread_mutex_t mutex; 19 20 struct list_head queue; 21 }; 22 23 static inline void thread_pool__init_job(struct thread_pool__job *job, struct kvm *kvm, kvm_thread_callback_fn_t callback, void *data) 24 { 25 *job = (struct thread_pool__job) { 26 .kvm = kvm, 27 .callback = callback, 28 .data = data, 29 .mutex = PTHREAD_MUTEX_INITIALIZER, 30 }; 31 } 32 33 int thread_pool__init(unsigned long thread_count); 34 35 void thread_pool__do_job(struct thread_pool__job *job); 36 37 #endif 38