いいえ、動的に作成する必要はありません。静的配列を使用できます。使用する前にすべてをセットアップする必要があります。できるよ:
#define NUM_THREADS 5
static pthread_mutex_t mutexes[NUM_THREADS] = {
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER
};
を変更するとエラーが発生しやすくなりますが、次のNUM_THREADS
ような方法で修正できます。
static pthread_mutex_t mutexes[] = {
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER,
PTHREAD_MUTEX_INITIALIZER
};
#define NUM_THREADS (sizeof(mutexes)/sizeof(*mutexes))
または、次のようなコードで行うこともできます。
#define NUM_THREADS 5
static pthread_mutex_t mutexes[NUM_THREADS];
// Other stuff
int main (void) {
for (int i = 0; i < NUM_THREADS; i++)
pthread_mutex_init(&mutexes[i], NULL);
// Now you can use them safely.
return 0;
}
いずれの場合も、使用する前に正しく設定されています。実際、私はあなたがスレッド処理を行う前にそれを行うことをお勧めしますが、それは私が偏執的であることだけです。