同步的概念

1. 多线程开发可能遇到的问题

假设两个线程t1和t2都要对num=0进行增1运算,t1和t2都各对num修改10次,num的最终的结果应该为20。

但是由于是多线程访问,有可能出现下面情况:

在num=0时,t1取得num=0。此时系统把t1调度为”sleeping”状态,把t2转换为”running”状态,t2也获得num=0。然后t2对得到的值进行加1并赋给num,使得num=1。然后系统又把t2调度为”sleeping”,把t1转为”running”。线程t1又把它之前得到的0加1后赋值给num。这样,明明t1和t2都完成了1次加1工作,但结果仍然是num=1。

from threading import Thread
import timeg_num = 0def test1():global g_numfor i in range(1000000):g_num += 1print("---test1---g_num=%d"%g_num)def test2():global g_numfor i in range(1000000):g_num += 1print("---test2---g_num=%d"%g_num)p1 = Thread(target=test1)
p1.start()# time.sleep(3) #取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?p2 = Thread(target=test2)
p2.start()print("---g_num=%d---"%g_num)

运行结果(可能不一样,但是结果往往不是2000000):

---g_num=284672---
---test1---g_num=1166544
---test2---g_num=1406832

取消屏蔽之后,再次运行结果如下:

---test1---g_num=1000000
---g_num=1041802---
---test2---g_num=2000000

问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为“线程不安全”。

2. 什么是同步

同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。

"同"字从字面上容易理解为一起动作

其实不是,"同"字应是指协同、协助、互相配合。

如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。

3. 解决问题的思路

对于本小节提出的那个计算错误的问题,可以通过线程同步来进行解决

思路,如下:

  1. 系统调用t1,然后获取到num的值为0,此时上一把锁,即不允许其他现在操作num
  2. 对num的值进行+1
  3. 解锁,此时num的值为1,其他的线程就可以使用num了,而且是num的值不是0而是1
  4. 同理其他线程在对num进行修改时,都要先上锁,处理完后再解锁,在上锁的整个过程中不允许其他线程访问,就保证了数据的正确性

同步的概念(python 版)相关推荐

  1. python计算gpa,Python版GPA计算器

    最近在网申投简历时遇到一个需要计算GPA的问题,想起自己在上学时写的Excel公式版GPA计算器略显low,而且操作也比较复杂,于是一时兴起,写了个Python版的,在此分享给大家! 准备工作: 用户 ...

  2. mooc数据结构与算法python版第十一周作业_中国大学 MOOC_数据结构与算法Python版_2020最新答案学习指南...

    中国大学 MOOC_数据结构与算法Python版_2020最新答案学习指南 更多相关问题 [判断题]实际集成运放的上限截止频率为无穷大 [多选题]现代城市的发展凸现出与以往不同的动力机制包括 教师在引 ...

  3. 中文领域最详细的Python版CUDA入门教程

    本系列为英伟达GPU入门介绍的第二篇,主要介绍CUDA编程的基本流程和核心概念,并使用Python Numba编写GPU并行程序.为了更好地理解GPU的硬件架构,建议读者先阅读我的第一篇文章. GPU ...

  4. 统计学习圣经!经典教材《统计学习导论》Python版

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 编辑:张倩,来源:机器之心 <统计学习导论>很经典,但习题用 ...

  5. 经典教材《统计学习导论》现在有了Python版

    来源:机器之心 本文约1000字,建议阅读5分钟 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实现. 斯坦福经典教材<The Element o ...

  6. 赞!经典教材《统计学习导论》终于有Python版了

    <统计学习导论>是数据科学家中最受欢迎的书籍之一,旨在介绍机器学习算法背后的概念,但这本书的习题都是用R语言实现的,这对于主要使用 Python 语言的机器学习研究者来说不太友好. 为了解 ...

  7. 【重磅】Python版《统计学习导论》来啦!附代码链接!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实 ...

  8. 没有统计学基础可以学python-没错!经典教材《统计学习导论》现在有了 Python版!...

    点击关注"Python学习与数据挖掘" 更多超级干货第一时间推送给你哦!!! <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实现. ...

  9. python心得1000字-经典教材《统计学习导论》现在有了Python版

    来源:机器之心 本文约1000字,建议阅读5分钟 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实现. 斯坦福经典教材<The Element o ...

最新文章

  1. Artistic Style在windows下的使用(C/C++)
  2. Linux Bash小结1
  3. 分布式锁,进程锁,线程锁到底是什么
  4. 虚拟机桥接模式不能上网
  5. 北斗导航 | 北斗伪距定位、测速与授时——PNT:最小二乘法、加权最小二乘:伪距单点定位
  6. python自学笔记之开源小工具:SanicDB介绍
  7. 优雅的在终端中编写Python
  8. python二进制图片压缩传输_python 中 base64 压缩图片,用post传送
  9. oracle startup作用,【学习笔记】Oracle打补丁后startup migrate、startup upgrade区别分析...
  10. github上完成个人的站点搭建
  11. MFC | 基于文档存储的学生成绩信息管理系统
  12. 微信H5 分享(自定义标题、图片、链接) 与 禁止分享(微信隐藏功能按钮) 功能的写法
  13. Python基础 模块化编程(模块的导入)
  14. 轻松编写您自己的拖拉机算法,进行算法大战
  15. 基于饥饿博弈搜索算法的函数寻优算法
  16. 2019多校第六场 HDU6638 Snowy Smile(区间最大子段和)
  17. 技巧篇 之 Just do it (这将会是一个漫长的历程。。。)
  18. 大师级管理人物盘点:“颠覆性技术“提出者-克里斯坦森
  19. Android---WMS核心分析
  20. 【TensorFlow】基础教程

热门文章

  1. crontab定时任务不生效问题解决
  2. 普惠金融在印尼:GoPay会是东南亚的蚂蚁金服吗?
  3. 智能合约从入门到精通:Solidity Assembly
  4. Ext.ClassManager源码
  5. 在TOC中添加右键查看属性信息菜单
  6. 关于组策略软件限制策略规则
  7. JavaScript玩转机器学习:Node 中的 TensorFlow.js
  8. Nginx利用nginx_upstream_check_module检查后端健康情况
  9. 容器编排技术 -- Kubernetes JSONpath Support
  10. ORA-39171: 作业出现可恢复的等待