x264的线程池定义在threadpool.h/threadpool.c中。
数据结构
threadpool的主体数据结构定义在x264_threadpool_t中,线程池中定义了三个list,分别为uninit list、run list和done list。分别对应job的三种状态,job的执行其实本质就是三个队列中的job切换,初始时,所有的job都在uninit队列中,当外界触发uninit队列中的job加入到run队列中,run队列处理完成后又放入done队列中,最后done队列中的job再放入到uninit队列中。通过x264_sync_frame_list_t中的mutex,cv_fill,cv_empty来进行同步操作。
struct x264_threadpool_t
{
volatile int exit;
int threads;
x264_pthread_t *thread_handle;
void (*init_func)(void *);
void *init_arg;
/* requires a synchronized list structure and associated methods,
so use what is already implemented for frames */
x264_sync_frame_list_t uninit; /* list of jobs that are awaiting use */
x264_sync_frame_list_t run; /* list of jobs that are queued for processing by the pool */
x264_sync_f