I would like to build a dynamic malloced array of pthread_mutex that will grow over time (adding more mutexes). My question is whether they will still work if the array gets moved with realloc(). My concern is that pthread_mutex_init() might somehow set up internal information that depends on the address of the mutex at that moment.
To be more specific, here is a toy snippet that shows the issue:
pthread_mutex_t *my_mutexes = (pthread_mutex_t *) malloc (sizeof(pthread_mutex_t));
pthread_mutex_init (my_mutexes, NULL);
my_mutexes = (pthread_mutex_t *) realloc (my_mutexes, 2*sizeof(pthread_mutex_t));
/* does my_mutexes[0] still work at this point? */
I suppose the answer in all such cases is "if it's not expressly allowed, assume not" but I wanted to get the sage advice here. If the conclusion is not to do this, then I wonder how, in general, I might create a growing list of mutexes.