スレッドに問題があります。
グローバル変数、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 のように見えます。わかりません 誰か説明してくれませんか?
どうもありがとうございました、
編集:
もう少し詳しく。
main() から:
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 内では出力されません。
ジャリー