Python多线程-线程锁
多线程修改一份数据时需要用到线程锁,以防止数据修改出错
#-*- 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多线程-线程锁的更多相关文章
- 孤荷凌寒自学python第四十天python 的线程锁RLock
孤荷凌寒自学python第四十天python的线程锁RLock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 因为研究同时在多线程中读写同一个文本文件引发冲突,所以使用Lock锁尝试同步, ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- 第十五章、Python多线程同步锁,死锁和递归锁
目录 第十五章.Python多线程同步锁,死锁和递归锁 1. 引子: 2.同步锁 3.死锁 引子: 4.递归锁RLock 原理: 不多说,放代码 总结: 5. 大总结 第十五章.Python多线程同步 ...
- Python学习---线程锁/信号量/条件变量同步/线程池1221
线程锁 问题现象: 多线程情况下,CPU遇到阻塞会进行线程的切换,所以导致执行了tmp-=1的值还未赋值给num=tmp,另一个线程2又开始了tmp -=1,所以导致最后的值重复赋值给了num,所以出 ...
- python多线程中锁的概念
1 2 3 4 5 6 7 8 mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([time ...
- c++11多线程---线程锁(mutex)
#include<mutex> 包含四类锁: 1 std::mutex 最基本也是最常用的互斥类 2 std::recursive_mutex 同一线程内可递归 ...
- python多线程--线程同步
如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步. 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire ...
- python的线程锁
1.先看一个例子,一个进程可以起多个线程,多个线程都共享这个线程的内存 import threading import time num = 100 thread_lock = threading.L ...
- Python 多线程 线程安全、daemon简介 (四)
线程安全 只能在Winodws下的ipython中演示,Python命令行.Pycharm.Mac下的ipython都演示不出效果 import threading def worker(): for ...
随机推荐
- java JVM 随笔
先说重点: 对象在堆区 方法在栈区 变量在方法区,常量池在方法区 为什么要了解Java 虚拟机 ? 这个问题一直困惑了我很长一段时间,其实在我们开发的过程中,即使我们不了解JVM也能正常的开发,但是当 ...
- git如何回滚远程仓库
git如何回滚远程仓库 http://www.cnblogs.com/iloveyou-sky/p/6534409.html
- [转载]Java给word中的table赋值
一.准备工作: 下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...
- python基础之网络基础
一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...
- 剑指offer--34.数字在排序数组中出现的次数
时间限制:1秒 空间限制:32768K 热度指数:209611 本题知识点: 数组 题目描述 统计一个数字在排序数组中出现的次数. class Solution { public: int GetNu ...
- iis不能访问html
在iis中配置好虚拟目录后,打开目录下的一个html文件,发现不是按照预想的输出,查看源代码后发现代码是: <html><head></head><body& ...
- Android中从SD卡中获取歌词并与歌曲同步
先看看效果图吧,再看代码 转换文件的编码格式 package com.xm; import java.io.BufferedInputStream; import java.io.BufferedRe ...
- JSP的三大指令
三大指令:page指令.include指令和taglib指令. page指令: * import:等同与import语句 <%@ page import="java.util.*& ...
- Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示
功能需求: 分省市统计并展示全国雨量站的数目与位置. 常规做法: 分省市雨量站的数目通过统计表的形式在页面端展示,位置根据XY坐标信息将雨量站标绘在图上. 优化做法: 去掉统计图的展示方式,直接将各省 ...
- ng 双向数据绑定 实现 注册协议效果
效果: 代码: <!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> ...