- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
湖北汽院嵌入式系统开发实验
实验二 嵌入式 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 stdio.h #include unistd.h #include pthread.h #include semaphore.h #define MAXSIZE 10 int stack[MAXSIZE]; int size=50; int front=-1,rear=0; sem_t avail,full; //avail 表示可用的空缓冲区,full 表示已存放产品的缓冲区 //生产者 pthread_t provider,customer,end; void provider_fun(void) //full 表示已存放产品的缓冲区 { int i=1; sleep(5); while(i=size) //生产50 个产品,需要放入到MAXSIZE 个缓冲区中 { sem_wait(avail); //avail 信号量P 操作,表示将可用的空缓冲区个数减1 stack[rear]=i; printf(produce the %d product\n,stack[rear]); rear=(rear+1)%MAXSIZE; i++; sleep(1); sem_post(full); //full 信号量V 操作,表示将存放产品的缓冲区个数加1 } pthread_exit(NULL); } //消费者 void customer_fun(void) { int i=1; while(i=size) { sem_wait(full); //fulll 信号量P 操作,表示将存放产品的缓冲区个数减1 front=(front+1)%MAXSIZE; printf(\t consume the%d product\n,stack[front]); stack[front]=0; sleep(2); sem_post(avail); //avail 信号量V 操作,表示将可用的空缓冲区个数加1 i++; } pthread_exit(NULL); } void end_fun(void) { char ch; scanf(%c,ch); pthread_cancel(provider); pthread_cancel(customer);d pthread_exit(NULL); printf(exit!\n); } void main() { pthread_t provider,customer; //定义生产者线程对象和消费者线程对象 sem_init(avail,0,MAXSIZE); //将avail 信号量初始化为MAXSIZE sem_init(full,0,0); //将full 信号量初始化为0 pthread_create(provider, NULL, (void *)provider_fun, NULL); // 创建生产者线程 pthread_create(customer, NULL, (void *)customer_fun, NULL);// 消费者线程 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()创建套接字,然后初始化struct sockaddr_in结构体。 (2)调用bind函数()为套接字绑定一个IP地址和一个端口号。 (3)调用listen()函数使套接字成为监听套接字,侦听指定的端口。 (4)调用accept()函数,使服务器处于阻塞状态,等待接受客户端连接请求。一旦建立连接,将产生新的套接字,此时就有两个套接字了,原来的那个套接字还在监听等待指
有哪些信誉好的足球投注网站
文档评论(0)