Inizializzazione del mutex dei pthread statici

Inizializzazione del mutex dei pthread statici


Usando pthread, come si potrebbe, in C, inizializzare un array statico di mutex?


Per un singolo mutex statico, sembra che io possa usare PTHREAD_MUTEX_INITIALIZER. Ma che dire di un loro array statico? Come, ad esempio,



#include <pthread.h>
#define NUM_THREADS 5
/*initialize static mutex array*/
static pthread_mutex_t mutexes[NUM_THREADS] = ...?

O devono essere allocati dinamicamente?


Risposte:


Se hai un compilatore conforme a C99 puoi usare P99 per eseguire la tua inizializzazione:


static pthread_mutex_t mutexes[NUM_THREADS] =
{ P99_DUPL(NUM_THREADS, PTHREAD_MUTEX_INITIALIZER) };

Questo ripete semplicemente la sequenza di token PTHREAD_MUTEX_INITIALIZER, il numero di volte richiesto.


Affinché funzioni, devi solo assicurarti che NUM_THREADS non si espande in una variabile ma in una costante intera decimale che è visibile al preprocessore e che non è troppo grande.