每次打电话给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 thread\n");
exit(1);
}
}
答案 0 :(得分: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 ) ...
索引为零的线程将开始使用start_routines[0]
ascending
。索引1处的线程将使用start_routines[1]
descending
开始,依此类推。
注意:如果您不喜欢&#34; raw&#34;定义函数指针数组的语法,使用typedef
使代码更具可读性:
typedef void* (*pthread_start_routine)(void*);
pthread_start_routine[] start_routines = {ascending, descending, randomized, unchanged};