#!-*-coding:utf-8-*-
#
加用户态的锁,与全局解释器锁不一样(GIL)
import threading, time
def run(n):
    lock.acquire() #获取用户态锁 也叫互斥锁Mutex
   
global num #操作
    #time.sleep(0.1) #
加了sleep之后程序变串行的了 一般不要加
   
num +=1
    lock.release() #释放用户态锁

lock=threading.Lock()
num=0
t_objs = []
for i in range(1000):
    t = threading.Thread(target=run, args=("t %s" % i,))
    t.start()
    t_objs.append(t)  # 把每个线程实例都加进来 不阻塞后面线程的启动
for t in t_objs: #取列表里的每个线程
   
t.join() #等待并行的每个线程全都执行完毕 在往下走

print("----all threads has finished...",threading.current_thread(),threading.active_count())
print("num",num)

import threading, timedef run1():     print("grab the first part data")     lock.acquire()     global num     num += 1     lock.release()     return num

def run2():     print("grab the second part data")     lock.acquire()     global num2     num2 += 1     lock.release()     return num2

def run3():     lock.acquire()     res = run1()     print('--------between run1 and run2-----')     res2 = run2()     lock.release()     print(res, res2)

 num, num2 = 0, 0lock = threading.RLock() #递归锁for i in range(1):     t = threading.Thread(target=run3)     t.start()

while threading.active_count() != 1:     print(threading.active_count())else:     print('----all threads done---')     print(num, num2)
import threading,timedef run(n):     semaphore.acquire() #信号量 相当于若干把锁 同时开启5个线程     time.sleep(1)     print("run the thread:%s\n"%n)     semaphore.release() #同时释放5把锁

if __name__=="__main__":     semaphore=threading.BoundedSemaphore(5) #最多允许5个线程同时运行 相当于有5把锁     for i in range(20):         t=threading.Thread(target=run,args=(i,))         t.start()

while threading.active_count() !=1:     pass else:     print("---all threads done----")

转载于:https://blog.51cto.com/13707996/2338538

Mutes锁_递归锁_信号量semaphore相关推荐

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  2. Java锁之可重入锁和递归锁

    Java锁之可重入锁和递归锁 目录 Java锁之可重入锁和递归锁基本概念 Java锁之可重入锁和递归锁代码验证 小结 理论,代码,小结,学习三板斧. 1. Java锁之可重入锁和递归锁基本概念 可重入 ...

  3. java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

    1.公平锁.非公平锁 2.可重入锁(递归锁) 3.自旋锁 AtomicReference atomicReference = new AtomicReference();//原子引用线程 下面代码5秒 ...

  4. Java面试之锁-可重入锁和递归锁

    可重入锁和递归锁ReentrantLock 概念 可重入锁就是递归锁 指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取到该锁的代码. 在同一线程在外层方法获取锁的时候,在进入内层方法会自动获取 ...

  5. Juc07_乐观锁和悲观锁、公平锁和非公平锁、递归锁(可重入锁)、死锁及排查、自旋锁

    文章目录 ①. 乐观锁和悲观锁 ②. 公平锁和非公平锁 ③. 可重入锁(又名递归锁) ④. 死锁及排查 ⑥. 自旋锁 ①. 乐观锁和悲观锁 ①. 悲观锁(synchronized关键字和Lock的实现 ...

  6. 你了解多线程自旋锁、互斥锁、递归锁等锁吗?

    首先看一下问题引出,先看一些经典的问题. 多线程的隐患 首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很 ...

  7. java-15种锁之可重入锁(又名递归锁)

    1.什么是可重入锁(递归锁) 可重入锁(也叫递归锁):指的是同一线程外层函数获得锁之后,内层递归函数仍然可以获取该锁的代码,在同一线程在外层方法获取锁的时候+,在进入内层方法会自动获取锁. 也就是说, ...

  8. 036-2018-1028 线程 效率对比 数据共享 同步锁死锁递归锁 守护线程 信号量

    笔记 昨日内容回顾: 队列:Queue 管道 : Pipe ,recv消息的时候 OSError,EOFError,数据不安全的 Manager : 共享数据 , 数据不安全 , 加锁 进程池 : P ...

  9. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...

    线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i ...

  10. java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...

    一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...

最新文章

  1. 后MATLAB时代的七种开源替代,一种堪称完美!
  2. VS2010中获取并调用CRM2011中的工作流
  3. 二维指针动态分配内存连续问题分析
  4. 日志 log4j.xml配置详解
  5. C - 3 求正弦值
  6. ToolBarTray与ToolBarPanel的区别
  7. linux下的FTP服务配置
  8. 将后台的返回的格式,根据某个共同的字段分组
  9. cout输出精确小数点
  10. Go程序设计语言导读
  11. 关于一些初级ACM竞赛题目的分析和题解(七)。
  12. 月光宝盒游戏机MAME街机模拟器方案源码项目解析----米饭模拟器(2)
  13. 目标检测(一)目标检测算法综述
  14. 获取用户手机号码解析失败,微信小程序授权登录获取token步骤
  15. C#练习题答案: 字母战争 - 核打击【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  16. 495. 提莫攻击(不会)
  17. 网络硬件三剑客 - 集线器、交换机与路由器
  18. [王鼎杰] 法国为什么是五常之一
  19. java 抽象类和接口——抽象类
  20. 在树莓派上用python实现人脸识别(face_recognition,PIL,opencv)

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_6_Lambda表达式有参数有返回值的...
  2. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
  3. [JSOI2010] 连通数
  4. 八.nginx网站服务实践应用
  5. 在线教育工具—白板系统的迭代1——bug监控排查
  6. eval函数处理JSON数据需要加括号
  7. Java语言中的泛型
  8. 《出发吧一起》第二阶段个人总结——Day08
  9. Android中的Handler的机制与用法详解
  10. 职涯成长的认知与突破