如果多个线程共同对某个数据修改,则可能出现不可预测的结果,这个时候就需要使用互斥锁来进行同步。例如,在三个线程对共同变量num进行100万次加减操作之后,其num的结果不为0.

【示例 1】不加锁的意外情况

运行结果如下:

-19

每次执行的结果是随机的,为0的概率非常小,之所以会出现不为0的情况,是因为这里同时又许多 语句修改num的值,当一个线程正在执行num+n,另外一个线程正在执行num-n , 从而导致之前的线程执行num-n 时num的值已不是之前的值,因此最终结果不为0.  为了保证数据的准确性,需要使用互斥锁对多个线程进行同步,限制当一个线程正在访问数据时,其他只能等待,知道前一线释放锁。使用threading.Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些每次只允许一个线程操作的数据,可以将其操作放到acquire方法和release方法之间。

【示例 2】加互斥锁后运行结果始终一致

无论运行多少次,执行结果都为0

31 多线程同步之Lock(互斥锁)相关推荐

  1. 多线程编程(3): 使用互斥锁同步线程

    python多线程编程(3): 使用互斥锁同步线程 问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据n ...

  2. 线程同步锁 java_java多线程同步之重入锁,详细解析

    上次已经为大家介绍过java多线程同步,Volatile详解的主要内容了.今天再来为大家介绍一些相关的内容,也就是java多线程同步之重入锁,一起来了解一下吧. 使用重入锁实现线程同步 在JavaSE ...

  3. python多线程编程(2): 使用互斥锁同步线程

    上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的代码: # ...

  4. python 线程锁_python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  5. python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  6. python多线程同步与互斥_python多线程编程(3): 使用互斥锁同步线程

    问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...

  7. Linux多线程的同步-----信号量和互斥锁

    前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...

  8. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  9. python中的 同步与异步 互斥锁 和 死锁

    同步与异步: 同步:指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去. 异步:指进程不需要一直等下去,而是继续执行下面的操 ...

最新文章

  1. Ant Design 入门-参照官方文档使用组件
  2. Spring Boot 中使用 MongoDB 增删改查
  3. linux jenkins 插件,使用Jenkins Dashboard插件可视化部署,
  4. Golang服务端开发及微服务架构
  5. 【NOIP2001】【codevs1039】数的划分
  6. 机器学习实战课后习题(四)
  7. 单片机c语言内部ram移动,2012年微型计算机原理与接口技术自考题模拟(9)
  8. 数字孪生中的人工智能——技术现状、挑战和未来研究课题
  9. 【退役文】Always Challenge Miracle ---- 记我的ACM生涯
  10. 疫情之下,企业如何突围?
  11. MATLAB app designer GUI设计
  12. geoserver配置SQL图层 cql_filter模糊查询
  13. 遇到电脑任务栏卡死怎么办
  14. 普通路由器改4g路由器_4G工业路由器将加速工业物联网发展进程
  15. spring cloud 总结(摘抄版)
  16. 微信公众平台生成二维码海报是如何做到的?
  17. vue移动端网页适配
  18. sqlserver、mysql、oracle各自的默认端口号
  19. 关于windows清理C盘问题
  20. 边缘计算初探:什么是边缘计算,它能做什么?

热门文章

  1. 嵌入式linux编译环境搭建,嵌入式Linux之旅——环境搭建篇之交叉编译工具的安装...
  2. 邵阳计算机专业哪家最好,邵阳学院专业排名 最好的专业有哪些
  3. 网站服务器怎么组件,网站服务器搭建与配置详解!
  4. spock_将Spock 1.3测试迁移到Spock 2.0
  5. 如何在php中插入map热点,PHP中使用BigMap实例
  6. dw html5怎么美化,DW CS5/CS6代码格式化、美化插件 Dreamweaver代码格式化美化插件
  7. 数据仓库dw层_数据仓库分层之辩
  8. linux操作普通文件夹,Linux学习--2.文件管理的基本命令
  9. php系统导出数据到excel,php导出大量数据到excel时,有哪些比较好的处理方法?...
  10. sw标准件不能配置_思科设备与华为设备在配置Telnet,有啥不一样呢?