apue.h是自己定义的头文件
里面包含
#include
#include <pthread.h>
#incldue

#include "apue.h"#define BUFFER_SIZE 5
#define PRODUCT_CNT 30using namespace std;struct product_cons
{int buffer[BUFFER_SIZE];pthread_mutex_t lock; //互斥锁int readposition;int writeposition;//读写位置pthread_cond_t notempty;   //条件变量 非空pthread_cond_t notfull; //条件变量 非满
}buffer;void init(struct product_cons *p)
{pthread_mutex_init(&p->lock,NULL);pthread_cond_init(&p->notempty,NULL);pthread_cond_init(&p->notfull,NULL);p->readposition = 0 ;p->writeposition = 0 ;
}void finish(struct product_cons *p)
{pthread_mutex_destroy(&p->lock);pthread_cond_destroy(&p->notempty);pthread_cond_destroy(&p->notfull);p->readposition = 0 ;p->writeposition = 0 ;
}void put(struct product_cons *p,int data)
{pthread_mutex_lock(&p->lock);if(p->writeposition + 1 == p->readposition||p->writeposition - 4 == p->readposition){cout << "producer wait for notfull" << endl;pthread_cond_wait(&p->notfull,&p->lock);}p->buffer[p->writeposition]=data;p->writeposition ++;if(p->writeposition >= BUFFER_SIZE){p->writeposition = 0 ;}pthread_cond_signal(&p->notempty);pthread_mutex_unlock(&p->lock);
}int get(struct product_cons *p)
{int data;pthread_mutex_lock(&p->lock);if(p->readposition == p->writeposition){cout << "consumer wait for notempty" << endl;pthread_cond_wait(&p->notempty,&p->lock);}data = p->buffer[p->readposition];p->readposition++;if(p->readposition >= BUFFER_SIZE){p->readposition = 0;}pthread_cond_signal(&p->notfull);pthread_mutex_unlock(&p->lock);return data;
}void*producer(void*data)
{for(int n = 1 ; n < 20 ; n ++ ){sleep(1);cout << "put the" << " " << n <<" " <<  "product..." << endl;put(&buffer,n);cout << "finished put" << endl;}cout <<"the 20 producers has been producted successfully" << endl;return NULL;
}   void*consumer(void*data)
{int NeedNum = 0;while(1){sleep(2);cout << "get product..."<< endl;int num = get(&buffer);cout <<"succeeded get the "<<" "<< num << "product"<<  endl;if(++NeedNum == PRODUCT_CNT){break;}}cout << "the 20 producers has been get successfully" << endl;return NULL;
}int main()
{pthread_t tha,thb;void*retval;int err ;init(&buffer);pthread_create(&tha,NULL,producer,0);pthread_create(&thb,NULL,consumer,0);pthread_join(tha,&retval);  pthread_join(thb,&retval);finish(&buffer);return 0;
}

【linux】两个线程实现出库与入库操作相关推荐

  1. java入库_Java实现商品的查找、添加、出库、入库操作完整案例

    本文实例讲述了Java实现商品的查找.添加.出库.入库操作.分享给大家供大家参考,具体如下: package com.jredu.oopch08; public class Goods1 { priv ...

  2. java版出库入库_Java实现商品的查找、添加、出库、入库操作完整案例

    本文实例讲述了Java实现商品的查找.添加.出库.入库操作.分享给大家供大家参考,具体如下: package com.jredu.oopch08; public class Goods1 { priv ...

  3. java 等入库完成_Java实现商品的查找、添加、出库、入库操作完整案例

    本文实例讲述了Java实现商品的查找.添加.出库.入库操作.分享给大家供大家参考,具体如下: package com.jredu.oopch08; public class Goods1 { priv ...

  4. 进销存ERP系统、销售单、采购单、退货单、库存管理、库存盘点、调拨、借入、借出、出库、入库、归还单、收款单、付款单、资金流水、销售报表、采购报表、库存报表、财务报表、商品库、电商erp、连锁erp

    进销存ERP系统.销售单.采购单.退货单.库存管理.库存盘点.调拨.借入.借出.出库.入库.归还单.收款单.付款单.资金流水.销售报表.采购报表.库存报表.财务报表.商品库.电商erp.连锁erp A ...

  5. 进销存ERP系统、销售单、采购单、退货单、库存管理、库存盘点、调拨、借入、借出、出库、入库、归还单、收款单、付款单、资金流水、销售报表、采购报表、库存报表、财务报表、商品库、电商erp、连锁erp 1

    进销存ERP系统.销售单.采购单.退货单.库存管理.库存盘点.调拨.借入.借出.出库.入库.归还单.收款单.付款单.资金流水.销售报表.采购报表.库存报表.财务报表.商品库.电商erp.连锁erp A ...

  6. MySQL小的出库入库_根据出库、入库表,实现对库存的信息查询

    数据库:mysql 要求:多个仓库.多个产品 表:1.入库凭证表 t_rkpz 2.入库明细表 t_rkpzmx 3.出库凭证表 t_ckpz 4.出库凭证表 t_ckpzmx 说明:两对主从表 [( ...

  7. WMS系统功能分析-出库、库管

    出库申请单:单据可以是通过外部系统推送数据到WMS系统生成,或者由WMS提供填报界面.此单存在的意义有两点:1.出库是有缘由的,有的需要走审批流程,最基本的要求也是要有记录,便于日后查询:虽说仓库在出 ...

  8. 进程有一个全局变量 i,还有有两个线程。i++ 在两个线程里边分别执行 100 次,能得到的最大值和最小值分别是多少?

    转自https://blog.csdn.net/biubiu741/article/details/77990592 多核CPU最小值为2,最大值200. 假设两个线程的执行步骤如下: 1. 线程A执 ...

  9. 申请审核和出库审核逻辑

    申请审核和出库审核逻辑 在实际的场景中,采购回来如笔记本电脑等的高值商品,申请人申请领用时,需要审核人审核通过后,才能流转到库管处出库确认.因此定义不需审核的材料和需要审核的材料 不需审核:采购回来的 ...

最新文章

  1. 【Zookeeper进阶】大白话解释Zookeeper的选举机制
  2. QT设置坐标轴XY轴显示范围方法
  3. LeetCode之Remove Duplicates from Sorted List
  4. idea 代码编译打包不报错,但是代码显示报错
  5. 牛客网暑期ACM多校训练营(第三场): E. Sort String(KMP)
  6. git 拉新项目_Git学习系列之Git基本操作拉取项目(图文详解)
  7. 在PB中使用WINSOCK.OCX做双向通信的简单例子
  8. android 文件转base64 base64字符串转文件 语音留言及语音播放
  9. 10个SQL注入工具
  10. 发光二极管pcb封装图画法_干货 | 从焊接角度谈画PCB图时应注意的问题
  11. 笛卡尔的爱心函数Java语言_笛卡尔情书的秘密——心形函数的绘制
  12. php中表格的高度怎么改,ppt表格行高调整不了怎么办
  13. Java最常见208道面试题:Java大土豆答案
  14. 基于双服务器的抗关键词猜测攻击的公钥可搜索加密方案
  15. 上门洗车小程序/APP功能介绍
  16. 计算机上如何设置访问密码忘了怎么办,电脑设置的密码忘记了怎么办
  17. uniapp 在线升级(热更新)及java后台
  18. 柯美smb扫描出现服务器连接错误_柯尼卡美能达bizhub283服务器连接错误的解决方法...
  19. Kafka SCRAM和PLAIN权限认证
  20. ISTP会议发表后多久能被检索收录!

热门文章

  1. 安卓 qemu 运行linux,在Qemu的beagleboard上运行Android
  2. python list去重函数_Python基础中的集合,函数——06
  3. js调用java_Js调用Java方法并互相传参的简单实例
  4. 使命召唤为啥显示新服务器玩家,《使命召唤8》建立服务器和加入自己、别人服务器方法...
  5. 路由器的地址转换功能
  6. 工厂模式在 Calendar 类中的应用
  7. c#文件分割与合并 part 1 (转自互联网)
  8. 一个存储交流的报告——闪存存储系统设计
  9. 【数据结构排序算法系列】数据结构八大排序算法
  10. 实时计算storm流程架构总结