c++中函数中的函数定义
function-definition in function for C++
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++不支持嵌套函数。是否有可能将此函数转换为非嵌套函数?
将线程函数移出封闭函数。创建一个结构体来保存完成工作所需的参数(在本例中为n
和end
),并将指向该结构体的指针传递给函数,一般顺序为:
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标准库中内置的线程支持。使用它,相比之下,您的任务几乎变得微不足道。实际上,线程的所有语法开销都消失了。更好的是,有一个相当公平的机会(例如,通过使用原子整型而不是受互斥锁保护的整型),它实际上也会大大提高效率。
相关文章:
- 不同翻译单元中不可重载的非内联函数定义
- Visual Studio中的函数声明和函数定义问题
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 具有enable_if外部类原型的模板类构造函数定义
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为函数定义符号不明确的指针参数
- C++模板专用化 - 无法匹配函数定义
- 错误:在第 6 行'{'标记之前,此处不允许使用函数定义
- 找不到 #define 的函数定义
- 根据类型特征更改函数定义?
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 命名空间更改函数定义
- "Type&"与C++函数定义中的"Type*"
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 如何从 C++ 中的现有模板函数定义新函数
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 为什么c++允许成员函数定义中实例的私有成员访问
- Qt基类函数定义
- C++函数定义中参数列表后面额外一对括号的含义