使用来自 argv 的命令来初始化全局互斥量

Use Commands from argv to Initialize a Global Mutex

我想做的是使用来自 argv 的数据定义一个全局互斥量。没问题,除了我还希望这个互斥量是全局的。

这不是全局::

int main (int argc, char **argv)
{
     int arg_1 = atoi(argv[1]);  
     pthread_mutex_t mutex[arg_1];
     return 0;
}

这是不可能的:

pthread_mutex_t mutex[arg_1];

int main (int argc, char **argv) {
     int arg_1 = atoi(argv[1]);`
     return 0;
}

那么我应该怎么做才能在我的所有由用户输入定义的函数中访问互斥体?

您可以使用动态分配,就像您使用任何其他类型一样。这里唯一的区别是动态分配的互斥量必须用 pthread_mutex_init():

初始化
pthread_mutex_t *mutex;
size_t n_mutex;

int main (int argc, char **argv)
{
    size_t i;

    if (argc < 2)
        return 1;

    n_mutex = atoi(argv[1]);

    if (n_mutex == 0)
        return 2;

    mutex = calloc(n_mutex, sizeof mutex[0]);

    if (!mutex)
        return 3;

    for (i = 0; i < n_mutex; i++) {
        if (pthread_mutex_init(&mutex[i], NULL))
            return 4;
    }

    /* global array mutex[] is initialised and can be used */

    return 0;
}