У меня проблема с темами.
Я определяю глобальную переменную, символ *, который я инициализирую в NULL, и мьютекс.
pthread_mutex_t mutex;
char *minURLTime;
minURLTime = NULL;
Затем я инициализирую свой мьютекс:
pthread_mutex_init(&mutex, NULL);
Затем я создаю новую тему:
void *status;
pthread_t t;
pthread_create(&t, NULL, executeThread, (void *) &val);
pthread_join(t, &status);
И внутри этой функции я выделяю пространство для minURLTime с помощью strdup и копирую строку из ссылки:
pthread_mutex_lock(&mutex);
minURLTime = strdup(link);
pthread_mutex_unlock(&mutex);
Поскольку я использую кучу (через strdup, которая вызывает malloc), я не понимаю, почему minURLTime не равен NULL, пока поток не завершен, но тогда он равен NULL.
pthread_exit(NULL);
Когда вызывается pthread_exit, хотя minURLTime является глобальной переменной, которая была выделена через strdup (которая вызывает malloc), она выглядит как NULL. Я не понимаю, может кто-нибудь объяснить мне?
Большое спасибо,
EDIT:
Немного подробнее.
Из основного ():
void *status;
pthread_t t;
pthread_create(&t, NULL, executeThread, (void *) &val);
pthread_join(t, &status);
Функция ExecuteThread:
void *
executeThread( void *val )
{
executeRequest(*((int *) val));
if (minURLTime != NULL) {
pthread_mutex_lock(&mutex);
fprintf(stderr, "\nURL AFTER THREAD ( BEFORE EXIT ): %s\n", minURLTime); // Not executed
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
fprintf не выполняется (ДО возврата pthread_exit).
Функция executeRequest:
void
executeRequest( int val )
{
/* some code */
pthread_mutex_lock(&mutex);
minURLTime = strdup(link);
pthread_mutex_unlock(&mutex);
if (minURLTime != NULL) {
pthread_mutex_lock(&mutex);
fprintf(stderr, "\nURL: %s\n", minURLTime); // This one DOES print
pthread_mutex_unlock(&mutex);
}
}
Это может быть полезно. Он печатает внутри executeRequest, но не внутри executeThread, до выхода из потока.
Jary