c++中函数中的函数定义

function-definition in function for C++

本文关键字:函数 定义 c++      更新时间:2023-10-16
 void iter_threads(int start, int end, void (*func)(int n))
 {
   int n = start;
   pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
   void *thread_body(void *ptr)
   {
     for (;;) {
       pthread_mutex_lock( &mutex );
       int i = (n)++;
       pthread_mutex_unlock( &mutex );
       if (i >= end)
         break;
       func(i);
     }
   }
   pthread_t thread_id[8];
   for (int i=0; i<8; i++)
     pthread_create(&thread_id[i], NULL, thread_body, NULL);
   for (int i=0; i<8; i++)
     pthread_join(thread_id[i], NULL);
 }

大家好,我知道g++不支持嵌套函数。是否有可能将此函数转换为非嵌套函数?

将线程函数移出封闭函数。创建一个结构体来保存完成工作所需的参数(在本例中为nend),并将指向该结构体的指针传递给函数,一般顺序为:

struct params { 
    int n;
    int end;
    void (*f)(int);
};
void thread_body(void *param) { 
   params *p = (params *)param;
   for (;;) {
       pthread_mutex_lock(&mutex);
       int i = (p->n)++;
       pthread_mutex_unlock(&mutex);
       if (i >= end)
           break;
       p->f(i);
    }
}
但是,除非您使用的是古老的版本的g++,否则真的不是您想要做的。您几乎肯定希望使用c++ 11标准库中内置的线程支持。使用它,相比之下,您的任务几乎变得微不足道。实际上,线程的所有语法开销都消失了。更好的是,有一个相当公平的机会(例如,通过使用原子整型而不是受互斥锁保护的整型),它实际上也会大大提高效率。