我的代码中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
}
答案 0 :(得分:0)
您需要工作线程和condition_variables来唤醒您的工作线程。
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个子线程来分配值。