私はこのコードを持っています:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <time.h>
int number;
pthread_mutex_t *mutex;
pthread_t *threads;
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
time_t rawtime;
struct tm * time_start;
time ( &rawtime );
time_start = localtime ( &rawtime );
printf ( "The number %ld thread is created at time %s \n",tid, asctime (time_start));
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
int i,rc;
printf("give threads");
scanf("%d",&number);
mutex = calloc( number, sizeof(*mutex));
threads = calloc(number, sizeof(*threads));
for (i = 0; i < number;i++) {
pthread_mutex_init( &mutex[i],NULL);
}
for(i=0; i<number; i++){
printf("In main: creating thread %d\n", i);
rc = pthread_create(&threads[i], NULL, PrintHello, (void *)i);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
return 0;
}
このコードの目的は、作成するスレッドの数をユーザーに尋ねることです。スレッドの作成後、スレッド自体が、スレッドの数とスレッドが作成された時刻を示す 2 つのメッセージを出力します。作成した。
問題は、メインの内部ではメッセージ"In main: creating thread"
が表示されますが、スレッド内のメッセージは表示されないことがあります。
たとえば、3 つのスレッドを作成し、1 つのスレッドのみがメッセージを表示し、そのスレッドも作成された時刻を表示しません。コードに問題があるかどうかはわかりません。