虚心请教一个线程池的问题。
正在实现一个线程池,现有一个问题点不太明确,我的主线程里初始化创建N个work_thread和一个manage_thread,想法是等所有的创建work_thread准备就绪后,主线程才继续向下运行,manage_thread暂不用考虑就绪与否,我的实现大概是
tp_init()
{
创建N个work_thread;
创建manage_thread;
等待所有work_thread就绪的通知;
}
我的想法:1. tp_init()里用pthread_cond_wait等待条件变量, work_thread的工作函数里检查已经就绪的线程的个数,到达N个后 pthread_cond_signal通知主线程继续运行, 但是pthread_cond_wait pthread_cond_signal的时序是一个问题,如果pthread_cond_signal 在 pthread_cond_wait 之前,信号会丢失,主线程永久阻塞。
2. 用一个全局变量counter和锁实现,每个work_thread就绪后counter++;主线程轮询或sleep()检查,但这个问题是各个线程会频繁加解锁,效率是不是会很低??
3. 使用一个信号实现,主线程阻塞信号调用 sig_wait();所有线程就绪后pthread_kill();主线程继续运行。
请帮忙看看这三种是不是都能实现,每一种的优缺点? 总感觉第一种的时序问题很大