Linux+;uClibc+;pthread(C):应用程序在结束时冻结

Linux+;uClibc+;pthread(C):应用程序在结束时冻结,linux,pthreads,uclibc,Linux,Pthreads,Uclibc,我正在尝试构建自己的uClibc嵌入式系统。我遇到了一些问题,但两天后,我解决了所有问题。只剩下一个:pthread无法正常工作。 下面是一个简单的程序,来自python的配置脚本: #include <pthread.h> void* routine(void* p){return NULL;} int main(){ pthread_t p; if(pthread_create(&p,NULL,routine,NULL)!=0) return 1;

我正在尝试构建自己的uClibc嵌入式系统。我遇到了一些问题,但两天后,我解决了所有问题。只剩下一个:
pthread
无法正常工作。 下面是一个简单的程序,来自python的配置脚本:

#include <pthread.h>

void* routine(void* p){return NULL;}

int main(){
  pthread_t p;
  if(pthread_create(&p,NULL,routine,NULL)!=0)
    return 1;
  (void)pthread_detach(p);
  return 0;
}
我试过新旧的linuxthreads,但都不管用。你有什么想法吗

编辑:

好的,我找到了更多信息:

#include <pthread.h>
#include <stdio.h>
void* routine(void* p){printf("AAA!\n");return NULL;}

int main(){
  pthread_t p;
  pthread_create(&p,NULL,&routine,NULL);
   printf("BBB!");
  (void)pthread_detach(p);
  pthread_exit(0);
  exit(0);
}
#包括
#包括
void*例程(void*p){printf(“AAA!\n”);返回NULL;}
int main(){
pthread_t p;
pthread_create(&p,NULL,&routine,NULL);
printf(“BBB!”);
(无效)pthread_detach(p);
pthread_退出(0);
出口(0);
}
只打印“AAA!”,然后冻结(glibc系统以随机顺序打印“AAA!”和“BBB!”)。所以我认为uclibc pthreads本身肯定有一些错误。还有其他帮助吗? 尝试了其他一些pthread测试,最后每个测试都冻结了。
编辑:我不知道为什么会出现这种情况,但我复制了预编译的uclibc,它现在可以工作了

如果没有通过其他方式确保主线程是最后一个运行的线程,
main
需要在返回前调用
pthread_exit()
,以等待所有其他线程终止


如果没有其他线程在运行,这将成为一个no-op,因此无论如何调用它也没有坏处。

如果您没有通过其他方式确保主线程是最后一个运行的线程,
main
需要在返回之前调用
pthread\u exit()
,以等待所有其他线程终止


如果没有其他线程在运行,这将成为no-op,因此,无论如何调用它也没有坏处。

glibc比uClibc更宽容,并且会默默地修复可检测的错误。glibc比uClibc更宽容,并且会默默地修复可检测的错误。我在ARM cortex_A8平台上用uClibc 0.9.30.2测试了你的代码,它工作正常。我在ARM cortex_A8平台上用uClibc 0.9.30.2测试了你的代码ARM cortex_A8平台,工作正常。
#include <pthread.h>
#include <stdio.h>
void* routine(void* p){printf("AAA!\n");return NULL;}

int main(){
  pthread_t p;
  pthread_create(&p,NULL,&routine,NULL);
   printf("BBB!");
  (void)pthread_detach(p);
  pthread_exit(0);
  exit(0);
}