使用来自ARGV的命令来初始化全局二线



我想做的是使用ARGV的数据定义全局互斥。这没问题,除了我也希望这个互斥X成为全局。

这不是全局::

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

那么,我该怎么办才能在用户输入定义的所有功能中可以访问mutex?

您可以使用动态分配,就像其他类型一样。这里唯一的区别是,必须使用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;
}

相关内容

  • 没有找到相关文章

最新更新