多次调用创建线程的方法

标签 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
}

最佳答案

您需要工作线程和条件变量来唤醒您的工作线程。

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/

相关文章:

C奇怪的int数组指针

c++ - 直接访问PCI串口

c - 从 Pthread 返回值

c - (C) 在多线程客户端和服务器中使用互斥量

c - 在 Netbeans 中在哪里设置 GCC 库依赖项?

pthreads - 在 pthread_mutex_t 中存储指针

objective-c - 加载 dylib 时垃圾收集工作队列崩溃

c - 将字符串中的 1-3 等速记符号扩展为 C 中的字符串数组

c - 用 C 语言编写一个程序,接受自然数 n 和基数 b,并输出 b 中 n 的数字

不包含头文件的编译