如果现在需要在多处加锁大于等于2的时候 因为计算机比较笨,当他锁上一把锁的时候又所理一把锁,等他来开锁的时候他不知道用哪把钥匙来开锁,

所以这个时候我们需要把把平常的锁变为迭代锁

eg:

import threading
import timelocal = threading.RLock()
# 迭代加锁首先生成实例
def run(name):global numlocal.acquire()  # 上锁num += 1run2(num)local.release()  # 解锁print(threading.active_count())def run2(num):local.acquire()num += 1run3(num)local.release()def run3(num):local.acquire()num+=1local.release()num = 0
py_res = []
for i in range(50):t = threading.Thread(target=run,args=('t%s'%i,))py_res.append(t)t.start()for i in py_res:i.join()print("num : %s"% num)

型号量可以控制同线程的个数,和锁的用法一样

import threading
import time
senm = threading.BoundedSemaphore(5)
def run(num):senm.acquire()  # 上锁time.sleep(2)print('run the thread %s' % num)senm.release()  # 解锁for i in range(50):t = threading.Thread(target=run, args=('%s' % i,))t.start()print(threading.active_count())while threading.active_count() != 1:pass
else:print('is done')

信号量:event

标志位 :set,设置标志位 clear 设置标志位,wait 等带标志位,is_set 判断是否设置了标志

下面是一个红绿灯的程序,实现红灯停绿灯行

import threading
import time
event = threading.Event()
# red is have flag or nodef light():count = 0while True:if count > 5 and count <= 10:print('red')event.set()elif count > 10:print('green')event.clear()count = 0else:print('in the else')time.sleep(1)count += 1
def car(name):while True:if event.is_set():print('the %s is runing...' % name)time.sleep(1)else:print('%s is wait...' % name)event.wait()t1 = threading.Thread(target=light)
t1.start()
t2 = threading.Thread(target=car, args=('tesla', ))
t2.start()

转载于:https://www.cnblogs.com/BookMiki/p/10202613.html

python之迭代锁与信号量相关推荐

  1. python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...

    前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...

  2. 递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池

    递归锁.信号量.GIL锁.基于多线程的socket通信和进程池线程池 递归锁 死锁现象:是指两个或两个以上的进程和线程因抢夺计算机资源而产生的一种互相等待的现象 from threading impo ...

  3. Python 进程互斥锁 Lock - Python零基础入门教程

    目录 一.Python 线程互斥锁和进程互斥锁 1.创建线程互斥锁 2.创建进程互斥锁 二.进程互斥锁 Lock 函数介绍 三.进程互斥锁 Lock 使用 案例一:使用进程,但不使用互斥锁 案例二:进 ...

  4. 互斥锁、死锁、递归锁、信号量、Event

    互斥锁 死锁和递归锁 Semaphore信号量 Event事件 互斥锁 互斥锁也叫用户锁.同步锁. 在多进程/多线程程序中,当多个线程处理一个公共数据时,会有数据安全问题,唯一能保证数据安全的,就是通 ...

  5. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁

    Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...

  6. python全局解释器锁 tensorflow_想轻松复现深度强化学习论文?看这篇经验之谈

    近期深度强化学习领域日新月异,其中最酷的一件事情莫过于 OpenAI和 DeepMind 训练智能体接收人类的反馈而不是传统的奖励信号.本文作者认为复现论文是提升机器学习技能的最好方式之一,所以选择了 ...

  7. Python培训教程:什么是Python全局解释器锁(GIL)?

    本期Python培训教程小编为大家带来的是关于"什么是Python全局解释器锁(GIL)?"的问题,全局解释器锁是计算机程序设计语言解释器用于同步线程的工具,使得在同一进程内任何时 ...

  8. python之互斥锁

    python之互斥锁 1.互斥锁的概念 互斥锁: 对共享数据进行锁定,保证同一时刻只能有一个线程去操作.  [对共享数据进行锁定可以理解为全局变量] 注意: 互斥锁是多个线程一起去抢,抢到锁的线程先执 ...

  9. python实现迭代的快速排序(Iterative Quick Sort)

    python实现迭代的快速排序(Iterative Quick Sort) 快速排序(Quicksort)是对冒泡排序算法的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本 ...

最新文章

  1. python莱布尼茨法计算π_酷叮猫少儿编程讲堂——Python 用莱布尼茨等式求π
  2. 要学好linux运维请从排版画图开始
  3. java jdbc连接derby,通过JDBC连接到Derby数据库失败
  4. mingw64 下 java_Win7 64 配置MinGW,以及使用Eclipse
  5. 关于String,StringBuffer和StringBuilder之间的区别和联系
  6. scrapy 爬虫利器初体验(1)
  7. 【codevs3945】 完美拓印
  8. Window phone7 修改程序语言
  9. 基于MATLAB步态算法仿真的六足仿生机器人
  10. java毕业设计springboot框架 java在线视频点播系统毕业设计开题报告功能参考
  11. web开发技术栈(后端)
  12. PlaySound error
  13. iPad安装老版本APP应用软件
  14. 使用python进行数据抽样
  15. 《轩辕剑四》:一场关于青铜朋客古代黑科技的浪漫幻想
  16. 计算机网络协议ppt,计算机网络基础——TCP-IP协议.ppt
  17. 【墨天轮】openGausss数据库有奖征文活动开始啦!华为平板、京东购物卡等你拿!
  18. No valid Maven installation found.
  19. chatbot学习汇总
  20. Mysql 多表联合更新

热门文章

  1. 【新手向】jQuery Mobile中动态加载或执行脚本的分析
  2. C#中的几种加密算法整理
  3. NIO:与 Buffer 一起使用 Channel
  4. if test project can't be opened in devenv
  5. 2017年深度学习十大趋势预测
  6. VC++读取AVi视频文件
  7. JavaScript总结(一)
  8. python之 启动一个子进程并等待其结束
  9. javascript中的链表结构—双向链表
  10. Python入门 学习笔记