1.使用线程池原因
规则个数不确定,规则内容不确定,使用普通的线程不停的创建和销毁会增加资源消耗。
2.使用过程注意事项
2.1 各线程之间避免冲突
规则之间相互对立,使用同一种算法,避免之间冲突,算法使用的全局变量需要使用关键字__thread来修饰。
2.2 线程同步
任务的添加和任务结束之间需要使用信号量进行同步,使用以下两个函数:
static void notify(void)
{
pthread_mutex_lock(&mtx);
flag_callback = 1;
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&cond);
}
static void wait(void)
{
pthread_mutex_lock(&mtx);
while (flag_callback == 0)
{
pthread_cond_wait(&cond, &mtx);
}
flag_callback =0;
pthread_mutex_unlock(&mtx);
}