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.