Python并发编程-线程锁
互斥锁-Lock
#多线程中虽然有GIL,但是还是有可能产生数据不安全,故还需加锁
from threading import Lock, Thread #互斥锁
import time
def eat1(lock):
    global n
    lock.acquire()
    temp =n
    time.sleep(0.2)
    n = temp - 1
    lock.release()
if __name__ == '__main__':
    n = 10
    t_lst = []
    lock = Lock()
    for i in range(10):
        t = Thread(target=eat1,args=(lock,))
        t.start()
        t_lst.append(t)
    for t in t_lst: t.join()
    print(n)
递归锁-RLOCK
from threading import RLock, Thread #RLock递归锁
import time
noddle_lock =fork_lock =RLock() #必须这么写,不能分开两行
# fork_lock = RLock()
def eat1(name):
    noddle_lock.acquire()
    print('%s拿到面条了'%name)
    fork_lock.acquire()
    print('%s拿到叉子了'%name)
    print('%s吃面了'%name)
    fork_lock.release()
    noddle_lock.release()
def eat2(name):
    fork_lock.acquire()
    print('%s拿到叉子了'%name)
    time.sleep(1)
    noddle_lock.acquire()
    print('%s拿到面条了'%name)
    print('%s吃面了'%name)
    noddle_lock.release()
    fork_lock.release()
Thread(target=eat1,args=('alex',)).start()
Thread(target=eat2,args=('egon',)).start()
Thread(target=eat1,args=('bossjin',)).start()
Thread(target=eat2,args=('nezha',)).start()
												
											Python并发编程-线程锁的更多相关文章
- Python并发编程-线程同步(线程安全)
		
Python并发编程-线程同步(线程安全) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 线程同步,线程间协调,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直 ...
 - python并发编程-线程和锁
		
什么是线程 进程:资源分配单位 线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程 线程的两种创建方式: from multiprocessing import Pr ...
 - Python并发编程-线程
		
Python作为一种解释型语言,由于使用了全局解释锁(GIL)的原因,其代码不能同时在多核CPU上并发的运行.这也导致在Python中使用多线程编程并不能实现并发,我们得使用其他的方法在Python中 ...
 - python网络编程--线程锁(互斥锁Mutex)
		
一:为什么需要线程锁 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? 很简单,假设你有A,B两 ...
 - python网络编程--线程(锁,GIL锁,守护线程)
		
1.线程 1.进程与线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观 ...
 - 15.python并发编程(线程--进程--协程)
		
一.进程:1.定义:进程最小的资源单位,本质就是一个程序在一个数据集上的一次动态执行(运行)的过程2.组成:进程一般由程序,数据集,进程控制三部分组成:(1)程序:用来描述进程要完成哪些功能以及如何完 ...
 - python并发编程-线程池
		
from concurrent.futures import ThreadPoolExecutor import time def func(n): time.sleep(2) print(n) re ...
 - Python并发编程-线程-一个简单的例子
		
from threading import Thread import time def func(n): #子线程完成的 time.sleep(1) print(n) #多线程示例 for i in ...
 - Python并发编程05 /死锁现象、递归锁、信号量、GIL锁、计算密集型/IO密集型效率验证、进程池/线程池
		
Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密集型效率验证.进程池/线程池 目录 Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密 ...
 
随机推荐
- 利用Tensorflow读取二进制CIFAR-10数据集
			
使用Tensorflow读取CIFAR-10二进制数据集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Tensorflow官方文档 tf.transpose函数解析 tf.sli ...
 - 51nod 1629 B君的圆锥
			
1629 B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量 ...
 - POJ 1113 Wall 凸包 裸
			
LINK 题意:给出一个简单几何,问与其边距离长为L的几何图形的周长. 思路:求一个几何图形的最小外接几何,就是求凸包,距离为L相当于再多增加上一个圆的周长(因为只有四个角).看了黑书使用graham ...
 - 【NOI2017】游戏 2-sat算法
			
[题目]LibreOJ [题意]n场游戏,有三种车ABC,给定长度为n的字符串,'a'表示不能选A,'b''c'同理,'x'表示不限,至多d个'x'.有m个限制(i,hi,j,hj)表示如果第i场选择 ...
 - parseInt
			
本文地址:http://www.cnblogs.com/veinyin/p/7647863.html 先来个简单的 console.log(parseFloat("8")); 嗯, ...
 - 在Unity中实现屏幕空间反射Screen Space Reflection(1)
			
本篇文章我会介绍一下我自己在Unity中实现的SSR效果 出发点是理解SSR效果的原理,因此最终效果不是非常完美的(代码都是够用就行),但是从学习的角度来说足以学习到SSR中的核心算法. 如果对核心算 ...
 - 2017ACM暑期多校联合训练 - Team 7 1010    HDU 6129   Just do it        (找规律)
			
题目链接 Problem Description There is a nonnegative integer sequence a1...n of length n. HazelFan wants ...
 - D - Binary Lexicographic Sequence URAL - 1081 (贪心)
			
题目链接:https://cn.vjudge.net/contest/275079#problem/D 具体思路:首先,我们可以观察到1-n位数的种数连起来是一个很有规律的数列,然后我们开始倒序建立. ...
 - js判断手机端(Android手机还是iPhone手机)
			
/** * [isMobile 判断平台] * @param test: 0:iPhone 1:Android */ function ismobile(test){ var u = navigato ...
 - PHP动态修改配置文件——php经典实例
			
文件结构: index.php 主页 config 配置文件 doUpdate.php 修改功能页 index.php <html> <head> <title>修 ...