为每个pthread调用不同的函数

Invoke different function for each pthread

本文关键字:函数 调用 pthread      更新时间:2023-10-16

我想在每次调用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};