博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-线程互斥锁与递归锁
阅读量:5172 次
发布时间:2019-06-13

本文共 1977 字,大约阅读时间需要 6 分钟。

1.线程跟进程里的互斥锁一样:

     将多个并发任务的部分代码(只涉及修改共享数据的代码,编程串行线程或进程操作)

     加锁可以保证多个进程修改同一数据,同一时间只能只要一个任务可以进行修改,这样可以保证数据的安全性,单牺牲了速度

 

from threading import thread,lockimport timemutex=lock()x=100def task():    global x    mutex.acquire()    temp=x    time.sleep(1)    x=temp-1    mutex.release()if __name__ =='__main__':    t_l=[]    start=time.time()    for i in tange():       t=thread(target=task)        t_l.append(t)        t.start()    for t in t_l:        t.join()    shop=time.time()    print(x,stop-start)

 

递归锁:互斥锁一旦运用在多个修改共享数据的时候,会出现锁死的情况,所以这个时候需要用到递归锁

 

            特点:可以连续的acquire()

from threading import Thread,Lock,active_count,RLockimport time# mutexA=Lock()# mutexB=Lock()obj=RLock() #递归锁的特点:可以连续的acquiremutexA=objmutexB=objclass Mythread(Thread):    def run(self):        self.f1()        self.f2()    def f1(self):        mutexA.acquire()        print('%s 拿到A锁' %self.name)        mutexB.acquire()        print('%s 拿到B锁' %self.name)        mutexB.release()        mutexA.release()    def f2(self):        mutexB.acquire()        print('%s 拿到B锁' %self.name)        time.sleep(1)        mutexA.acquire()        print('%s 拿到A锁' %self.name)        mutexA.release()        mutexB.release()if __name__ == '__main__':    for i in range(10):        t=Mythread()        t.start()    print(active_count())           #统计当前线程数#递归锁的特点:可以连续的acquiremutexA=objmutexB=objclass Mythread(Thread):    def run(self):        self.f1()        self.f2()    def f1(self):        mutexA.acquire()        print('%s 拿到A锁' %self.name)        mutexB.acquire()        print('%s 拿到B锁' %self.name)        mutexB.release()        mutexA.release()    def f2(self):        mutexB.acquire()        print('%s 拿到B锁' %self.name)        time.sleep(1)        mutexA.acquire()        print('%s 拿到A锁' %self.name)        mutexA.release()        mutexB.release()if __name__ == '__main__':    for i in range(10):        t=Mythread()        t.start()    print(active_count())           #统计当前线程数

 

 

 

           

转载于:https://www.cnblogs.com/Marcki/p/10111926.html

你可能感兴趣的文章
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Django基于admin的stark组件创建(一)
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>