为每个pthread调用不同的函数

时间:2015-10-13 16:41:16

标签: c++ pthreads posix

每次打电话给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);
     }
 }

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};