湖北汽院嵌入式系统开发实验

湖北汽院嵌入式系统开发实验

ID:38631139

大小:109.50 KB

页数:15页

时间:2019-06-16

湖北汽院嵌入式系统开发实验_第1页
湖北汽院嵌入式系统开发实验_第2页
湖北汽院嵌入式系统开发实验_第3页
湖北汽院嵌入式系统开发实验_第4页
湖北汽院嵌入式系统开发实验_第5页
资源描述:

《湖北汽院嵌入式系统开发实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验二嵌入式Linux多线程通信实验程(thread)是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。P(S):①将信号量S的值减1,即S=S-1;②如果S≥0,则该进程继续执行;否则该进程状态置为阻塞状态,进程PCB排入信号量PCB队列末尾,放弃CPU,等待V操作的执行。V(S):1将信号量S的值加1,即S=S+1;2如果S≤0,释放信号量队列中第一个PCB所对应的进程,将进程状态由阻塞态改为就绪态。执行V操作的进程继续执行。#include#include#include

2、ead.h>#include#defineMAXSIZE10intstack[MAXSIZE];intsize=50;intfront=-1,rear=0;sem_tavail,full;//avail表示可用的空缓冲区,full表示已存放产品的缓冲区//生产者pthread_tprovider,customer,end;voidprovider_fun(void)//full表示已存放产品的缓冲区{inti=1;sleep(5);while(i<=size)//生产50个产品,需要放入到MAXSIZE个缓冲区中{sem_wait(

3、&avail);//avail信号量P操作,表示将可用的空缓冲区个数减1stack[rear]=i;printf("producethe%dproduct",stack[rear]);rear=(rear+1)%MAXSIZE;i++;sleep(1);sem_post(&full);//full信号量V操作,表示将存放产品的缓冲区个数加1}pthread_exit(NULL);}//消费者voidcustomer_fun(void){inti=1;while(i<=size){sem_wait(&full);//fulll信号量P操作,表示将存放产品的

4、缓冲区个数减1front=(front+1)%MAXSIZE;printf("tconsumethe%dproduct",stack[front]);stack[front]=0;sleep(2);sem_post(&avail);//avail信号量V操作,表示将可用的空缓冲区个数加1i++;}pthread_exit(NULL);}voidend_fun(void){charch;scanf("%c",&ch);pthread_cancel(provider);pthread_cancel(customer);dpthread_exit(NULL)

5、;printf("exit!");}voidmain(){pthread_tprovider,customer;//定义生产者线程对象和消费者线程对象sem_init(&avail,0,MAXSIZE);//将avail信号量初始化为MAXSIZEsem_init(&full,0,0);//将full信号量初始化为0pthread_create(&provider,NULL,(void*)provider_fun,NULL);//创建生产者线程pthread_create(&customer,NULL,(void*)customer_fun,NULL);

6、//消费者线程pthread_create(&end,NULL,(void*)end_fun,NULL);pthread_join(provider,NULL);pthread_join(customer,NULL);pthread_join(end,NULL);sem_destroy(&avail);sem_destroy(&full);}实验三、嵌入式Linux网络通信实验3、TCP套接字通信步骤服务器端:(1)调用socket()创建套接字,然后初始化structsockaddr_in结构体。(2)调用bind函数()为套接字绑定一个IP地址和一个端口

7、号。(3)调用listen()函数使套接字成为监听套接字,侦听指定的端口。(4)调用accept()函数,使服务器处于阻塞状态,等待接受客户端连接请求。一旦建立连接,将产生新的套接字,此时就有两个套接字了,原来的那个套接字还在监听等待指定的端口,而新产生的套接字则准备发送或接受数据。(5)利用send/sendto和recv/recvfrom进行数据传输。当然也可以调用write或read.(6)数据传输完毕,关闭套接字。请补充server.c中代码//fuwuqi#include#include//包含

8、套接字函数库#include#in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。