为每个pthread调用不同的函数
Invoke different function for each pthread
我想在每次调用pthread_create
时调用不同的函数。我有四个不同的函数对用户输入的数组执行一些处理。升序、降序等。我如何才能做这个内部循环,如下所示,只有一个函数?
for (i = 0; i < num_threads; i++) {
param[i] = ... ; // Initialize parameter for thread i
if ( pthread_create(&tid[i], &attr, worker, & param[i]) != 0 ) {
printf("Cannot create threadn");
exit(1);
}
}
这样做的一种方法是创建一个函数指针数组,并使用i
作为该数组的索引:
void* ascending(void* x) { ... }
void* descending(void* x) { ... }
void* randomized(void* x) { ... }
void* unchanged(void* x) { ... }
void* (*start_routines[])(void*) = {ascending, descending, randomized, unchanged};
现在你可以这样做:
if ( pthread_create(&tid[i], &attr, start_routines[i%4], & param[i]) != 0 ) ...
索引为0的线程将开始使用start_routines[0]
,即ascending
。索引1处的线程将开始使用start_routines[1]
,即descending
,以此类推。
注意:如果您不喜欢定义函数指针数组的"原始"语法,请使用typedef
使您的代码更具可读性:
typedef void* (*pthread_start_routine)(void*);
pthread_start_routine[] start_routines = {ascending, descending, randomized, unchanged};
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 类型擦除的std::function与虚拟函数调用的开销