我有线程问题。
我正在定义一个全局变量、一个初始化为 NULL 的 char * 和一个互斥锁。
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);
在该函数内部,我使用 strdup 为 minURLTime 分配空间并从链接中复制一个字符串:
pthread_mutex_lock(&mutex);
minURLTime = strdup(link);
pthread_mutex_unlock(&mutex);
当我使用堆时(通过调用malloc的strdup),我不明白为什么minURLTime在线程退出之前不是NULL,但是它是NULL。
pthread_exit(NULL);
一旦调用 pthread_exit,尽管 minURLTime 是一个通过 strdup(调用 malloc)分配的全局变量,它似乎为 NULL。没看懂,谁能解释一下?
非常感谢,
编辑:
再详细一点。
从主():
void *status;
pthread_t t;
pthread_create(&t, NULL, executeThread, (void *) &val);
pthread_join(t, &status);
执行线程函数:
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 之前)。
执行请求功能:
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 内部打印。
杰里