2015-05-04 61 views
0

我想要做的是使用argv中的數據定義一個全局互斥體。不是一個問題,除了我也希望這個互斥體是全局的。使用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; 
} 

所以,我應該怎麼做才能夠在我所有的函數訪問互斥那是由用戶輸入定義的?

回答

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