char *p = ....; /* shared variable */ pthread_mutex_t lp ; /* protects ā€˜pā€™ but not len!!!*/ int getplen() { pthread_mutex_lock (&lp); int len = strlen(p); pthread_mutex_unlock (&lp); return len; } int some_function() { int nchars = getplen(); // obtain length char *copy = malloc(nchars + 1); // commit to allocate memory ------ pthread_mutex_lock (&lp); strcpy(copy, p); pthread_mutex_unlock (&lp); }