多次创建线程的调用方法

时间:2016-05-21 01:57:31

标签: c pthreads

我的代码中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
}

1 个答案:

答案 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个子线程来分配值。