C - 如何创建一个全局数组,其大小是函数的整数结果?

C - How can you create a global array, who's size is the integer result of a function?

基本上我想创建一个线程池,所以我做了一个数组来存储固定数量的线程。

#define num_of_threads (sysconf(_SC_NPROCESSORS_ONLN)*2)

static pthread_t threadpool[num_of_threads];

变量 'threadpool' 是一个全局变量(在所有函数之外声明),我需要它,因为有多个不同的函数使用它。

而不是仅仅给出固定数量的线程,如 4 或 8,我认为我会很聪明并找出任何 Linux 系统拥有的核心数量,使用:

sysconf(_SC_NPROCESSORS_ONLN)

然后用它来确定要创建的线程数。

问题是你不能在文件范围内有可变修改的变量,有什么办法可以克服这个问题吗?还是我试图做的事情一开始就没有必要?

谢谢。

文件范围内的变量具有静态存储持续时间,这意味着它存在于程序的整个运行时间内。因此,它的大小必须是固定的。如果您首先必须执行某些操作来确定大小,则该对象可能不存在。

但是没有什么能阻止您将全局 指针 初始化为 0。在一些初始化代码中,您可以使用 malloc() 分配数组并将其分配给这样的指针:

static pthread_t *threadpool;
static size_t num_of_threads;

static void initThreadpool(void)
{
    num_of_threads = sysconf(_SC_NPROCESSORS_ONLN) * 2;
    threadpool = malloc(num_of_threads * sizeof *threadpool);
    if (!threadpool) exit(1);
}

请注意您的设计方式,以便只有一个线程实际尝试创建此数组。