31 多线程同步之Lock(互斥锁)
如果多个线程共同对某个数据修改,则可能出现不可预测的结果,这个时候就需要使用互斥锁来进行同步。例如,在三个线程对共同变量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(互斥锁)相关推荐
- 多线程编程(3): 使用互斥锁同步线程
python多线程编程(3): 使用互斥锁同步线程 问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据n ...
- 线程同步锁 java_java多线程同步之重入锁,详细解析
上次已经为大家介绍过java多线程同步,Volatile详解的主要内容了.今天再来为大家介绍一些相关的内容,也就是java多线程同步之重入锁,一起来了解一下吧. 使用重入锁实现线程同步 在JavaSE ...
- python多线程编程(2): 使用互斥锁同步线程
上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的代码: # ...
- python 线程锁_python多线程编程(3): 使用互斥锁同步线程
问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...
- python多线程编程(3): 使用互斥锁同步线程
问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...
- python多线程同步与互斥_python多线程编程(3): 使用互斥锁同步线程
问题的提出 上一节的例子中,每个线程互相独立,相互之间没有任何关系.现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1.很容易写出这样的 ...
- Linux多线程的同步-----信号量和互斥锁
前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...
- Linux Qt使用POSIX多线程条件变量、互斥锁(量)
今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...
- python中的 同步与异步 互斥锁 和 死锁
同步与异步: 同步:指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去. 异步:指进程不需要一直等下去,而是继续执行下面的操 ...
最新文章
- Ant Design 入门-参照官方文档使用组件
- Spring Boot 中使用 MongoDB 增删改查
- linux jenkins 插件,使用Jenkins Dashboard插件可视化部署,
- Golang服务端开发及微服务架构
- 【NOIP2001】【codevs1039】数的划分
- 机器学习实战课后习题(四)
- 单片机c语言内部ram移动,2012年微型计算机原理与接口技术自考题模拟(9)
- 数字孪生中的人工智能——技术现状、挑战和未来研究课题
- 【退役文】Always Challenge Miracle ---- 记我的ACM生涯
- 疫情之下,企业如何突围?
- MATLAB app designer GUI设计
- geoserver配置SQL图层 cql_filter模糊查询
- 遇到电脑任务栏卡死怎么办
- 普通路由器改4g路由器_4G工业路由器将加速工业物联网发展进程
- spring cloud 总结(摘抄版)
- 微信公众平台生成二维码海报是如何做到的?
- vue移动端网页适配
- sqlserver、mysql、oracle各自的默认端口号
- 关于windows清理C盘问题
- 边缘计算初探:什么是边缘计算,它能做什么?
热门文章
- 嵌入式linux编译环境搭建,嵌入式Linux之旅——环境搭建篇之交叉编译工具的安装...
- 邵阳计算机专业哪家最好,邵阳学院专业排名 最好的专业有哪些
- 网站服务器怎么组件,网站服务器搭建与配置详解!
- spock_将Spock 1.3测试迁移到Spock 2.0
- 如何在php中插入map热点,PHP中使用BigMap实例
- dw html5怎么美化,DW CS5/CS6代码格式化、美化插件 Dreamweaver代码格式化美化插件
- 数据仓库dw层_数据仓库分层之辩
- linux操作普通文件夹,Linux学习--2.文件管理的基本命令
- php系统导出数据到excel,php导出大量数据到excel时,有哪些比较好的处理方法?...
- sw标准件不能配置_思科设备与华为设备在配置Telnet,有啥不一样呢?