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);
}
请注意您的设计方式,以便只有一个线程实际尝试创建此数组。
基本上我想创建一个线程池,所以我做了一个数组来存储固定数量的线程。
#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);
}
请注意您的设计方式,以便只有一个线程实际尝试创建此数组。