ARM的嵌入式Linux移植体验之应用实例
b->writepos++;
if(b->writepos>=BUFFER_SIZE)
b->writepos=0;
/*设置缓冲区非空的条件变量*/
pthread_cond_signal(b->notempty);
pthread_mutex_unlock(b->lock);
}
/*从缓冲区中取出整数*/
intget(structprodcons*b)
{
intdata;
pthread_mutex_lock(b->lock);
/*等待缓冲区非空*/
if(b->writepos==b->readpos)
{
pthread_cond_wait(b->notempty,b->lock);
}
/*读数据,移动读指针*/
data=b->buffer[b->readpos];
b->readpos++;
if(b->readpos>=BUFFER_SIZE)
b->readpos=0;
/*设置缓冲区未满的条件变量*/
pthread_cond_signal(b->notfull);
pthread_mutex_unlock(b->lock);
returndata;
}
/*测试:生产者线程将1到10000的整数送入缓冲区,消费者线
程从缓冲区中获取整数,两者都打印信息*/
#defineOVER(-1)
structprodconsbuffer;
void*producer(void*data)
{
intn;
for(n=0;n10000;n++)
{
printf(%d--->n,n);
put(buffer,n);
}put(buffer,OVER);
returnNULL;
}
void*consumer(void*data)
{
intd;
while(1)
{
d=get(buffer);
if(d==OVER)
break;
printf(--->%dn,d);
}
returnNULL;
}
intmain(void)
{
pthread_tth_a,th_b;
void*retval;
init(buffer);
/*创建生产者和消费者线程*/
pthread_create(th_a,NULL,producer,0);
pthread_create(th_b,NULL,consumer,0);
/*等待两个线程结束*/
pthread_join(th_a,retval);
pthread_join(th_b,retval);
return0;
}
4.小结
本章主要给出了Linux平台下文件、进程控制与通信、线程控制与通信的编程实例。至此,一个完整的,涉及硬件原理、Bootloader、操作系统及文件系统移植、驱动程序开发及应用程序编写的嵌入式Linux系列讲解就全部结束了。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码