gpt4 book ai didi

c - pthread 创建无法正常工作

转载 作者:行者123 更新时间:2023-12-04 10:47:56 28 4
gpt4 key购买 nike

我有这段代码:

#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 条消息,说明线程数和时间它是创建的。

问题是在 main 中显示消息 "In main: creating thread" 但线程中的消息有时不显示。

例如,它会创建 3 个线程,只有 1 个线程会显示其消息,并且该线程也不会显示创建的时间。不知道是不是代码有问题。

最佳答案

根本原因:
您的 main() 在子线程有机会完成任务之前退出。

解决方案:
您需要确保 main() 等待所有线程完成其工作。
你需要使用:

pthread_join()

实现这个功能。在从 main() 返回之前添加以下内容:

for(i=0; i<number; i++)
{
pthread_join(threads[i], NULL);
}

其他问题:

  • 您动态分配内存但从不取消分配。尽管如此,一旦您的程序返回,操作系统就会回收内存。明确地这样做是一种很好的做法。
  • 您创建了一个互斥体,但您既没有使用它,也没有释放它。但这似乎是正在进行的代码。

关于c - pthread 创建无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172059/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com