ARM的嵌入式Linux移植体验之应用实例

时间:2012-05-11来源:网络

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系列讲解就全部结束了。

1 2 3 4 5

关键词: 应用 实例 体验 移植 嵌入式 Linux ARM

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版