案例分析:
实际生活中,如果有一对情侣共用一张银行卡,假如,一个男生去存款,一个女生去取款。女生在取款的时候,男生存款,抢占了取款操作线程。如果不做线程的同步就会导致的结果是,女生取了款但是数据库没有正常将银行卡扣款,而且还将银行账户多增加了余额,这种情况一旦,发生,那么银行就得倒闭,那么如何避免这种情况发生呢?就需要用到线程锁,下面看下具体实现。
如下代码:男生每次存101元,女生每次取100元,最终增长了对应的钱。而这就好比我们生活中的原始积累。

#include <iostream>
#include <mutex>
#include <thread>using namespace std;//存钱
void Deposit(mutex &m,int &money)
{//锁的粒度应该尽可能最小化for (int i = 0; i < 100; i++){m.lock();money += 101;m.unlock();}
}//取钱
void Withdraw(mutex &   m,int &money)
{for (int i = 0; i < 100; i++){m.lock();money -= 100;m.unlock();}
}int main()
{mutex m;int money = 2000;cout << "cunrrent money:" << money << endl;thread tMan(Deposit,ref(m),ref(money));thread tWoman(Withdraw,ref(m),ref(money));tMan.join();tWoman.join();cout << "final money:" << money << endl;return 0;
}

输出结果:
cunrrent money:2000
final money:2100

代码分析:
1.存取款为什么要穿引用,一十提升效率,二是不传应用或者地址会直线对参数的副本进行操作,原来的金额没有改变。
2.为什么要调用join,为了避免主线程在子线程执行完之前结束,保证子线程逻辑执行完。
3.lock位置,加载money变量被改变的上下文,保证加锁粒度足够细。

C++11多线程实现银行存取款案例相关推荐

  1. python计算银行余额_Python 小案例实战 —— 简易银行存取款查询系统

    Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...

  2. [案例3-2]银行存取款程序设计

    案例描述 银行存取款的流程是人们非常熟悉的事情,用户可在银行对自己的资金账户进行存款.取款.查询余额等操作,极大的便利了人民群众对资金的管理. 本任务要求,使用所学知识编写一个银行存取款程序,实现存取 ...

  3. java模拟银行存取_JAVA基础案例 模拟银行存取款业务

    模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型.操作 ...

  4. java模仿银行账务业务_Java基础案例 - 模拟银行存取款业务

    博学谷--让IT教学更简单,让IT学习更有效 模拟银行存取款业务 编写一个Java应用程序,模拟网上银行登录及存取款业务.登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当 ...

  5. c语言银行每月额外存款100,C语言课程设计_银行存取款业务.doc

    <C语言程序设计>课 程 设 计 报 告 题目:模拟银行存取款业务 学生姓名 学 号 专 业 班 级 学 部 计算机科学与电气工程学部 目 录 TOC \o "1-3" ...

  6. C语言作业银行ATM系统,C语言银行存取款管理系统

    <C语言银行存取款管理系统>由会员分享,可在线阅读,更多相关<C语言银行存取款管理系统(16页珍藏版)>请在人人文库网上搜索. 1.高级语言程序设计 课程设计报告得分:信电工程 ...

  7. Java实验2【银行存取款程序设计实验】

    文章目录 前言 一.任务介绍 1.任务描述 2.运行结果 3.任务目标 4.实现思路 二.程序实现 1.代码 2.实验结果(包括输入数据和输出结果) 总结 前言 记录学习中写的Java实验,我这里用的 ...

  8. 任务3-2 银行存取款

    目录 题目 代码 1.BankAccount.java 2.Bank.java 运行结果 题目 对于银行存取款的流程,人们非常熟悉,用户可在银行对自己的资金账户进行存款.取款.查询余额等操作,极大地方 ...

  9. 银行存取款系统的设计与实现c语言,【银行|银行存取款管理系统设计】取款|管理|系统|设计-傻大方...

    『易坊知识库摘要_银行|银行存取款管理系统设计』在客户文件中,每个客户是一条记录,包括编号.客户姓名.支取密码.客户地址.客户电话.账户总金额:在存取款文件中,每次存取款是一条记录,包括编号.日期.类 ...

最新文章

  1. 正视CSS 08】巅峰对武之float你为什么要坍塌我的元素!!!
  2. python多线程加速for循环_多线程-如何在Python的循环中对操作进行多线程
  3. poj 2524 Ubiquitous Religions (并查集)
  4. VMware搭建Android x86
  5. rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)
  6. 【C++深度剖析教程38】类模板深度剖析
  7. Error:java: Annotation processing is not supported for module cycles.异常解决
  8. 剑指offer——面试题28:字符串的排列
  9. Android应用开发环境搭建
  10. ftpclient覆盖上传文件
  11. LabVIEW编程LabVIEW开发研华PCI 1756例程与相关资料
  12. 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇
  13. QCC3040---Media Player module
  14. 网易云课堂 python网络爬虫实战
  15. pandas操作excel 笔记
  16. YOLOv3学习——锚框和候选区域
  17. 搭建mysql 主从复制The slave I/O thread stops because master and slave have equal MySQL server UUIDs
  18. 营养素的基础知识1(非技术文)
  19. 高德地图海量点 API 初探
  20. 2017.11.21 软件工程概论第一节课

热门文章

  1. Java学习笔记17(面向对象十:综合案例)
  2. 关于redis的几点思考
  3. 【转】 详解C中volatile关键字
  4. SQL Server AlwaysOn读写分离配置
  5. iOS中Runtime简析
  6. UVa 10288 (期望) Coupons
  7. Jlink--SWD脚位连接
  8. as3中的 override
  9. mysql 表上线_腾讯云上线数据库 MySQL 8.0 版
  10. Error: Cannot find module ‘import-local‘