当前位置: 首页 > news >正文

福州综合网站建设企业网站营销的典型案例

福州综合网站建设,企业网站营销的典型案例,深圳注册公司创业补贴,四川省建设厅新网站实验名称:经典同步问题:生成者与消费者问题 相关知识 信号量 信号量是用来协调不同进程间的数据对象,可用来保护共享资源,也能用来实现进程间及同一进程不同线程间的进程同步。分为二值信号灯和计算信号灯两种类型。 进程与线…

实验名称:经典同步问题:生成者与消费者问题

相关知识

信号量

信号量是用来协调不同进程间的数据对象,可用来保护共享资源,也能用来实现进程间及同一进程不同线程间的进程同步。分为二值信号灯和计算信号灯两种类型。

进程与线程原语的比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIyhHBPe-1671105369897)(Images/实验:进程管理-进程同步问题1.png)]

线程创建

线程创建是通过函数 pthread_create(thread,attr,start_routine,arg)函数来实现的,而该函数是通过Linux特有的系统调用clone来实现的。
格式:

#include<pthread.h>
int pthread_create(thread,attr,start_routine,arg);

其中参数thread为线程标识符,attr为线程属性设置,start_routine为线程函数起始地址,arg为传递给start_routine的参数。创建线程成功返回0,否则返回错误号。

获得线程标识符

格式:

#include<pthread.h>
pthread_t pthread_self(void);

说明:返回调用的线程的标识符。每个线程都有自己的线程标识符,以便在进程内区分,线程标识符在pthread_create创建时产生。

线程等待

格式:

#include<pthread.h>
int pthread_join(thread,retval);

说明:该函数将调用它的线程阻塞,一直等到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。thread为被等待的线程标识符,retval为用户定义的指针,存放被等待线程的返回值。

线程退出

格式:

#include<pthread.h>
void pthread_exit(retval); //终止调用线程,`retval`为线程的返回值。int pthread_cancel(thread); //终止由参数thread指定的线程

实验内容

使用多线程和信号量解决生产者/消费者问题:有一个长度为N的缓冲池被生产者和消费者共同使用。只要缓冲池未满,生产者就可以将消息送入缓冲池;只要缓冲池不空,消费者便可从缓冲池中取走一个消息。生产者向缓冲池放入消息的同时,消费者不能操作缓冲池,反之亦然。

pthread_join()将调用它的线程阻塞,一直等到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。本实验中使用room_sem信号量来表示缓冲区可用空间,product_sem信号量表示缓冲区中有无可用产品,而mutex代表线程互斥信号量。

编写producer_consumer.c:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>
#include<sys/types.h>
#define PRODUCER_NUM 5
#define CONSUMER_NUM 5
#define POOL_SIZE 11
int pool[POOL_SIZE]; //buffer
int head=0; //read pointer
int rear=0; //write pointer
sem_t room_sem;//available room in buffer
sem_t product_sem;//available products in buffer
pthread_mutex_t mutex;
void producer_fun(void*arg)
{while(1){sleep(1);sem_wait(&room_sem);pthread_mutex_lock(&mutex);//producer write data to bufferpool[rear]=1;rear=(rear+1)%POOL_SIZE;printf("producer %d write to pool\n",(int)arg);printf("pool size is %d\n",(rear-head+POOL_SIZE)%POOL_SIZE);pthread_mutex_unlock(&mutex);sem_post(&product_sem);}
}
void consumer_fun(void *arg)
{while(1){int data;sleep(10);sem_wait(&product_sem);pthread_mutex_lock(&mutex);//consumer read data in bufferdata=pool[head];head=(head+1)%POOL_SIZE;printf("consumer %d read from pool\n",(int)arg);printf("pool size is %d\n",(rear-head+POOL_SIZE)%POOL_SIZE);pthread_mutex_unlock(&mutex);sem_post(&room_sem);}
}
int main()
{pthread_t producer_id[PRODUCER_NUM];pthread_t consumer_id[CONSUMER_NUM];pthread_mutex_init(&mutex,NULL);int ret=sem_init(&room_sem,0,POOL_SIZE-1);//initialize the signal room_semif(ret!=0){printf("sem_init error\n");exit(0);}ret=sem_init(&product_sem,0,0); //initialize the signal produc_semif(ret!=0){printf("sem_init error\n");exit(0);}for(int i=0;i<PRODUCER_NUM;i++){//create producer threadret=pthread_create(&producer_id[i],NULL,producer_fun,(void*)i);if(ret!=0){printf("producer_id error\n");exit(0);}//create consumer threadret=pthread_create(&consumer_id[i],NULL,consumer_fun,(void*)i);if(ret!=0){printf("consumer_id error\n");exit(0);}}for(int i=0;i<PRODUCER_NUM;i++){pthread_join(producer_id[i],NULL);pthread_join(consumer_id[i],NULL);}exit(0);
}

编译时使用以下命令:
gcc -o producer_consumer producer_consumer.c -lpthread

注:编译选项要加上-lpthread,因为pthread不是Linux默认库,链接时需要使用静态库libpthread.a

http://www.shuangfujiaoyu.com/news/35575.html

相关文章:

  • 公司搭建一个网站软文兼职
  • 临沧网站制作百度一下官方网页
  • 公司网站开源源码超级优化大师下载
  • 建设厅安全员证广州seo推广营销
  • 深圳求做网站seo优化有哪些
  • 服务器不稳定 如何让百度重新收录网站厦门seo排名扣费
  • 国内做网站需要做icp备案吗开发app需要多少资金
  • 网页设计与制作项目教程黑马程序员网站优化入门
  • 展会搭建公司有哪些正规网站优化哪个公司好
  • 用帝国做的网站只收录首页图片外链生成工具在线
  • 教做家庭菜的网站seo如何建立优化网站
  • 网站开发技术服务合同范本山东关键词快速排名
  • 怎么做课题组网站com域名
  • 网站建设到哪个店做关键seo排名点击软件
  • 办公装修怎么设计网站编辑seo
  • 公司邮箱后缀正确的是以下seo研究中心教程
  • 绵阳微信网站乔拓云智能建站系统
  • 哈尔滨做网站营销网站建设哪家快
  • 重庆市建筑一体化平台广州网站优化公司如何
  • 如何做 行业社交类网站免费python在线网站
  • 网站首页只显示域名百度手机助手app下载安装
  • 做网站上线一般要多久自己建立网站步骤
  • 网站建设要注意一些什么北京快速优化排名
  • 扶贫工作网站怎么做中南建设集团有限公司
  • 定制建站网站建设快速排名seo软件
  • php 自动做网站点击量线上营销的优势
  • express 网站开发网址导航推广
  • 百度收录最高发帖网站搜索引擎是什么意思啊
  • 婚纱网站开发进度表搜索引擎优化员简历
  • 制作网站公司合同注意事项长沙优化网站