uclinux的一个多线程编程的问题,大家都过来讨论
一个示范的多线程程序,就在主函数里面创建两个线程,然后在两个线程里面是死循环,一直打印。但是一运行就一直重复打印下面的东西:Allocation of length 2097152 from process 19 failed
Buffer memory: 368kB
Free pages: 4724kB ( 0kB HighMem)
Zone:DMA freepages: 0kB min: 0kB low: 0kB high: 0kB
Zone:Normal freepages:4724kB min: 80kB low: 160kB high: 240kB
Zone:HighMem freepages: 0kB min: 0kB low: 0kB high: 0kB
( Active: 135, inactive: 43, free: 1181 )
= 0kB)
1*4kB 0*8kB 1*16kB 1*32kB 1*64kB 0*128kB 0*256kB 1*512kB 0*1024kB 2*2048kB = 4724kB)
= 0kB)
是什么原因啊?
程序我在linux底下编译而且运行过,没有一点问题。
但是在uclinux底下就这样了。
程序:
#include<stdio.h>
#include<pthread.h>
#include<time.h>
#include<errno.h>
void thread1(void)
{int i=0;
for(i=0;i<6;i++)
{printf("\tthread1\n");
if(i==2)
pthread_exit(0);
usleep(5000);
}
}
void thread2(void)
{
int i;
while(1){
for(i=0;i<3;i++)
printf("thread2\n");
usleep(5000);}
pthread_exit(0);
}
int main(void)
{
pthread_t id1,id2;
int ret;
pthread_attr_t attr;
//init thread
pthread_attr_init(&attr);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
//create thread
ret=pthread_create(&id1,&attr,(void *) thread1,NULL);
if(ret!=0){
printf("create pthread1 error\n");
exit(1);
}
ret=pthread_create(&id2,NULL,(void *) thread2,NULL);
if(ret!=0){printf("create pthread2 error\n");
exit(1);
}
pthread_join(id1,NULL);
pthread_join(id2,NULL);
return 0;
} void thread1(void)
{int i=0;
for(i=0;i<6;i++)
{printf("\tthread1\n");
if(i==2)
pthread_exit(0);
usleep(5000);
}
}
这个应该是个死循环
改了的哪个忘拷出来了 各位达人快发表下意见啊。好急啊 重新编译一下uClinux,把uClinux分配内存设的大点,试一下!! 单独运行一个 pthread 有问题么? pthread_attr_init(&attr);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
把这几句去掉就没问题了
页:
[1]