当前位置: 首页 > news >正文

python threading Python threading锁:不加上它,你的共享变量就等着被撕碎

用以线程之间互斥访问之情况的同步原语是锁(Lock)在内那个范畴里的, 它能够被用来对共享资源予以保护, 可确保在任何一个时刻之时, 仅有单独的一个线程能够去访问共享资源, 借由这样的方式进而防止多线程并发访问所引发出的数据竞争以及不一致性的状况产生。于下面之处分别去详细地说明锁的使用以及所有的功能, 并且给出示例:

锁的使用:

访问控制涉及对共享资源, 是要借助锁, 以获取以及释放的途径达成的。一旦有线程获取到锁, 别的线程便获取不到锁, 只能等待锁被释放, 之后才能够继续执行。

锁的所有功能:

示例1:使用锁实现对共享变量的互斥访问

import threading # 创建一个锁对象 lock = threading.Lock() # 共享资源 count = 0 # 线程函数 def thread_func(): global count for _ in range(100000): # 获取锁 lock.acquire() try: # 对共享资源进行操作 count += 1 finally: # 释放锁 lock.release() # 创建并启动多个线程 threads = [] for _ in range(4): thread = threading.Thread(target=thread_func) thread.start() threads.append(thread) # 等待线程执行完毕 for thread in threads: thread.join() # 打印最终结果 print("Final count:", count)

于上述所举示例之内, 我们构建了一个锁对象lock, 并且设定了一个共享变量count。在任意一个线程的执行函数环节当中, 先是借助lock.()去获取锁, 接着针对那共享变量开展操作, 最终经由lock.()来释放锁。

示例2:锁的可重入性

import threading # 创建一个锁对象 lock = threading.Lock() # 线程函数 def thread_func(): with lock: print("Outer lock acquired!") with lock: print("Inner lock acquired!") # 创建并启动线程 thread = threading.Thread(target=thread_func) thread.start() thread.join()

于上述示例里头, 我们构建了一个锁对象lock, 在线程函数当中, 借由使用with lock:语句来获取锁, 在内部锁获取之前, 外部锁已被线程获取了, 这是因锁的可重入性所致, 可重入性致使同一个线程能够多次获取同一个锁, 且不会引发死锁。

各类示例呈现出锁的运用情况以及常见功能, 借助锁的使用, 能够达成对共享资源的互斥访问,以此保障多线程程序的正确性与一致性。

http://www.gsyq.cn/news/1477358.html

相关文章:

  • 告别轮询!用STM32CubeMX和HAL库实现STM32F407的CAN中断收发(FIFO与邮箱详解)
  • 从音频剪辑到股票K线:傅里叶变换在5个不同领域的降噪实战
  • 别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)
  • ZCU106开发板实战:用PetaLinux 2019.2为Vitis AI编译系统镜像,我遇到的网络和版本坑都在这了
  • 低惯量电网动态分区:谱聚类算法与工程实践
  • 用C++和Eigen库搞定ECEF到ENU坐标转换(附完整代码与osgEarth验证)
  • Zynq UltraScale+ ZCU102上,用ADI DAQ3板卡调试JESD204B链路的完整避坑指南
  • 2026年不锈钢板式换热器TOP5推荐:板式换热器维修/板式换热机组/板式热交换器/耐腐蚀板式换热器/钛板换热器/选择指南 - 优质品牌商家
  • 成都简单点家电维修:服务技术细节及联系推荐 - 优质品牌商家
  • 从智能灯到传感器:拆解三个真实案例,看蓝牙Mesh、WiFi直连和ZigBee自组网到底怎么用
  • 模拟IC设计实战:用Cadence ADE XL快速绘制MOS管gm/Id曲线(附完整Ocean脚本)
  • 2026年新消息:天宁区新房开荒保洁公司,常州卓锦家政服务有限公司表现如何? - 2026年企业资讯
  • 2026年板式换热机组技术选型与专业供应商解析:高温汽水板式换热器/BR系列板式冷却器/不锈钢板式换热器/加工板式换热器/选择指南 - 优质品牌商家
  • 从机载雷达到你的手机:聊聊‘不起眼’的缝隙天线是如何无处不在的
  • 保姆级教程:Matconvnet + MATLAB 2020b + CUDA 10.1 + VS2019 环境配置一次成功(附常见错误修复)
  • 除了发论文,Nature和Science还能怎么用?给科研新手的5个高效“榨干”技巧
  • Sketch MeaXure:企业级设计标注与规范自动化技术架构解析
  • 国内板式换热机组实力厂商排行:高温汽水板式换热器/BR系列板式冷却器/不锈钢板式换热器/加工板式换热器/可拆式板式换热器/选择指南 - 优质品牌商家
  • SAP COPA获利分析增强实战:手把手教你用ABAP代码搞定COPA0001特性派生
  • Cadence Virtuoso ADE保姆级教程:手把手教你用gm/Id方法绘制MOS管性能曲线(附完整Ocean脚本)
  • AMD Ryzen系统调试工具终极指南:解锁处理器性能的秘密
  • 对象分类模型中的成员推理测试(MINT)原理与实践
  • 告别兼容性烦恼:一份详细的Twincat3项目结构迁移与配置指南(附TC2对比)
  • 别光看协议了!从ILA抓取的波形,带你真正看懂JESD204B的CGS和ILAS阶段
  • STM32F407 CAN通信调试踩坑记:从CubeMX配置到TJA1050硬件排查(附完整代码)
  • 告别数据混乱!用CDO处理气象NetCDF/GRIB文件的5个高频场景与完整命令清单
  • Kubernetes 集群维护与故障排查:从 CPU/内存压力节点驱逐、CoreDNS 解析抖动到集群自愈恢复全生命周期
  • FPGA新手也能玩转DDS:用Vivado和Verilog手把手教你做个简易信号发生器
  • 【CSDN AI数字营销深度拆解】:内容营销与信息流广告的5大本质差异及3个协同增效关键点
  • 别再死磕手册了!TMS320F280049C ADC实战:从ePWM触发到过采样,手把手教你配置SOC