linux系统编程中的信号量--模拟生产者与消费者
来源:互联网 发布:网龙网络开发怎么样 编辑:程序博客网 时间:2024/05/17 09:36
/*************************************************************FileName : producer_and_customer.c*description : This app demonstrates how to use the semaphore* solve the problem about the producer and customer.*version : 1.0 *history : none *************************************************************//**************************************************************用多线程、信号量实现生产者和消费者的模拟,仓库容量为10,仓库中开始有3件产品,消费者每3秒消费一件产品,生产者每两秒生产一个产品,生产者和消费者不能同时进入仓库(需要互斥).***************************************************************/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <semaphore.h>#include <phread.h>#define msleep(x) usleep(x*1000)#define PRODUCT_SPEED 3 //生产速度#define COSTOM_SPEED 1 //消费速度#define INIT_NUM 3 //仓库原有产品数#define TOTAL_NUM 10//仓库容量sem_t p_sem,c_sem,sh_sem;int num = INIT_NUM;void product(void)//生产产品{ sleep(PRODUCT_SPEED);}int add_to_lib()//添加产品到仓库{ num++; msleep(500); return num;}void consum()//消费{ sleep(CONSUM_SPEED);}int sub_from_lib()//从仓库中取产品{ num--; msleep(500); return num;}void *productor(void *arg){ while(1) { sem_wait(&p_sem);//生产信号减一 product();//生产延时 sem_wait(&sh_sem);//用来互斥的信号 printf("push into!tatol_num=%d\n",add_to_lib()); sem_post(&sh_sem); sem_post(&c_sem);//消费者信号量加一 }}void *consumer(void *arg){ while(1) { sem_wait(&c_sem);//消费者信号量减一 sem_wait(&sh_sem); printf("pop out!tatol_num=%d\n",sub_from_lib()); sem_post(&sh_sem); sem_post(&p_sem);//生产者信号量加一 consum();//消费延时 }}int main(int argc, char *argv[]){ pthread_t tid1,tid2; sem_init(&p_sem,0,TOTAL_NUM-INIT_NUM); sem_init(&c_sem,0,INIT_NUM); sem_init(&sh_sem,0,1); pthread_create(&tid1,NULL,productor,NULL); pthread_create(&tid2,NULL,consumer,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); return 0;}
0 0
- linux系统编程中的信号量--模拟生产者与消费者
- Linux下的信号量----生产者与消费者
- Linux系统编程——生产者与消费者问题
- Linux系统编程——生产者与消费者(二)
- Linux多线程编程(三)-----生产者与消费者(条件变量,信号量)
- 信号量与生产者消费者问题
- 【Linux】生产者消费者编程实现-线程池+信号量
- 【Linux】生产者消费者编程实现-线程池+信号量
- linux中的生产者和消费者问题--信号量 互斥 同步
- linux c 生产者与消费者问题 信号量(sem_t)
- 【Linux】中的生产者与消费者的关系
- linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
- linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
- QT 中的生产者和消费者信号量
- Linux--生产者与消费者
- Linux--生产者与消费者
- Linux信号量机制(生产者消费者)
- 信号量实现生产者消费者问题 window linux
- Sqlite3 瞎捣鼓笔记
- 【Day23】几道值得研究注意的php相关问题(一)
- IOS类库管理工具CocoaPods的使用教程
- 利用Fibonacci队列学习python
- makefile的规则与模板
- linux系统编程中的信号量--模拟生产者与消费者
- springmvc上传附件出现异常Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- Leetcode-109. Convert Sorted List to Binary Search Tree
- 11 个炫酷的 Linux 终端命令大全
- Java字符串格式化
- install nvm(node version manager)
- 为VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址
- workstation虚拟机,linux切换到在后台运行(B),,正常退出,解决方法
- GitHub 优秀的 Android 开源项目