我想做的是使用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;
}