多线程修改一份数据时需要用到线程锁,以防止数据修改出错

#-*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" import threading
import time num = 0
t_obj = []
lock = threading.Lock() #声明一个锁并赋给一个变量 def MyThread(n):
lock.acquire() #给线程加锁
global num
time.sleep(0.5)
num +=1
lock.release() #释放给线程锁 for i in range(20):
t = threading.Thread(target=MyThread,args=(i,))
t.start()
t_obj.append(t) for t in t_obj:
t.join() print("num:",num)

递归锁

递归锁就是锁中有锁,一把锁套着一把锁

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR" import threading num = 0
num2 = 0
lock = threading.RLock() #声明一个递归锁 def Lock_1():
print("---This is Lock_1---")
lock.acquire()
global num
num += 1
lock.release()
return num def Lock_2():
print("---This is Lock_2---")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2 def Lock_3():
lock.acquire()
print("---This is Lock_3---")
Run_Lock_1 = Lock_1()
print("---Between Lock_1 and Lock_2---")
Run_Lock_2 = Lock_2()
lock.release()
print(Run_Lock_1,Run_Lock_2) for i in range(10):
t = threading.Thread(target=Lock_3)
t.start() while threading.active_count() != 1:
print(threading.active_count())
else:
print("---All Thread Have Done---")
print(num,num2)

Python多线程-线程锁的更多相关文章

  1. 孤荷凌寒自学python第四十天python 的线程锁RLock

     孤荷凌寒自学python第四十天python的线程锁RLock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 因为研究同时在多线程中读写同一个文本文件引发冲突,所以使用Lock锁尝试同步, ...

  2. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  3. 第十五章、Python多线程同步锁,死锁和递归锁

    目录 第十五章.Python多线程同步锁,死锁和递归锁 1. 引子: 2.同步锁 3.死锁 引子: 4.递归锁RLock 原理: 不多说,放代码 总结: 5. 大总结 第十五章.Python多线程同步 ...

  4. Python学习---线程锁/信号量/条件变量同步/线程池1221

    线程锁 问题现象: 多线程情况下,CPU遇到阻塞会进行线程的切换,所以导致执行了tmp-=1的值还未赋值给num=tmp,另一个线程2又开始了tmp -=1,所以导致最后的值重复赋值给了num,所以出 ...

  5. python多线程中锁的概念

    1 2 3 4 5 6 7 8 mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([time ...

  6. c++11多线程---线程锁(mutex)

    #include<mutex> 包含四类锁: 1      std::mutex    最基本也是最常用的互斥类 2      std::recursive_mutex  同一线程内可递归 ...

  7. python多线程--线程同步

    如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步. 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire ...

  8. python的线程锁

    1.先看一个例子,一个进程可以起多个线程,多个线程都共享这个线程的内存 import threading import time num = 100 thread_lock = threading.L ...

  9. Python 多线程 线程安全、daemon简介 (四)

    线程安全 只能在Winodws下的ipython中演示,Python命令行.Pycharm.Mac下的ipython都演示不出效果 import threading def worker(): for ...

随机推荐

  1. 解析session与cookie

    Session和Cookie相关概念 Session和Cookie都是有服务器生成的. Session和Cookie都是键值对形式保存,主要用于存储特定的一些状态值. Session保存在服务器,Co ...

  2. 【deep learning精华部分】稀疏自编码提取高阶特征、多层微调完全解释及代码逐行详解

    我们前面已经讲了如何训练稀疏自编码神经网络,当我们训练好这个神经网络后,当有新的样本输入到这个训练好的稀疏自编码器中后,那么隐藏层各单元的激活值组成的向量就可以代表(因为根据稀疏自编码,我们可以用来恢 ...

  3. react 项目及视频

    项目     视频

  4. 混用Application.LoadLevel 和 PhotonNetwork.LoadLevel

    最近这一周从上周五晚上加完班回家夜里都12点了. 又赶紧送孩子去儿童医院  .. 就肺炎住院了.  真是有啥别有病呢.  悲剧的是我周三夜里陪了一夜后. 转天晚上也发烧了.. 周四 周五输了两天液. ...

  5. HelloWorld 模块

    helloworld.c 代码 #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("D ...

  6. 重温CLR(二)生成、部署以及程序集

    将类型生成到模块中 class Program { static void Main(string[] args) { Console.WriteLine("Hi"); } } 该 ...

  7. (转)移动端开发总结(一)视口viewport总结

    转载链接:移动端开发中,关于适配问题的一点总结(一) 视口 布局视口layout viewport 视觉视口visual viewport 理想视口 缩放 一个重大区别 最小缩放 和最大缩放 分辨率 ...

  8. Servlet、Filter、Listener

    1.Servlet 1.1servlet接口 All Known Implementing Classes:GenericServlet, HttpServlet GenericServlet:与协议 ...

  9. Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  10. SublimeText3常用插件安装与使用

    packagecontroller的安装 https://packagecontrol.io/ 安装了它就可以更好的进行插件的安装和管理 复制代码,打开控制面板[ctrl+·]将代码拷贝,即可进行安装 ...