我有代码,其中 main()
正在调用 function_one()
。在 function_one()
中,我创建一个线程并调用函数 function_two()
。现在的问题是 main()
多次调用 function_one()
,而 function_one()
每次调用时都会创建一个新线程。在此代码中,我不能使用超过 4 个线程,也不能更改 main()
。有什么方法可以重用之前调用 function_one()
期间创建的线程吗?
这是我正在使用的伪代码:
main()
{
int x=1,y=2;
while(1) {
x++;y++;
function_one(x,y);
}
}
function_one(int x, int y)
{
pthread_t ax; //initialization is missing
pthread_create(ax,NULL,&function_two,NULL);
}
function_two()
{
//some operation
}
最佳答案
您需要工作线程和条件变量来唤醒您的工作线程。
pthread_cond_t new_value_cv;
bool exit_flag;
int main(){
exit_flag=false;
pthread_t ax[4]; //initialization is missing
for(int i=0;i<4; i++){
pthread_create(ax[i],NULL,&function_two,NULL);
}
int x=1,y=2;
while(1) {
x++;y++;
function_one(x,y);
}
}
function_one(int x, int y)
{
pthread_cond_signal(&new_value_cv);
}
function_two()
{
pthread_mutex_t wait_mutex;
while(1){
pthread_cond_wait(&new_value_cv, &wait_mutex);
if (exit_flag) break;
//do_something
}
}
如果您需要 function_two()
接受参数,则需要检查消费者/生产者模式。特别是单一生产者/多个消费者模式。基本思想是使用由 main
和 4 个子线程共享的线程安全队列来分发值。
关于多次调用创建线程的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358137/