不,您不必动态创建它们。您可以使用静态数组,您只需在使用它们之前将它们全部设置好。你可以这样做:
#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;
}
在所有这些情况下,在您尝试使用它们之前,它们都已正确设置。事实上,在你做任何任何线程的事情之前,我会做得很好,但这只是我偏执。