python线程同步简单实现(Lock、RLock)

import threading,time
'''
线程同步,使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire() 和 release() 方法之间
'''
class Mthread(threading.Thread):
    '''
       Lock()在同一方法中只能使用一次acquire(),否则会死锁
       Rlock()在同一方法中可使用多次acquire(),但是也必须执行同样次数的release(),否则会死锁
    '''
    threadLock=threading.Lock()#这里可以换成RLock
    def __init__(self,id,name,counter):
        threading.Thread.__init__(self)
        self.id=id
        self.name=name
        self.counter=counter
    def run(self):
        print('开启线程。。。'+self.name)
        #获取锁,用做同步
        self.threadLock.acquire()
        self.print_time(self.name,self.counter,3)
        #释放锁,开启下一个线程
        self.threadLock.release()
    def print_time(self,threadname,delay,counter):
        while counter:
            time.sleep(delay)
            print("{},{}".format(threadname,time.ctime(time.time())))
            counter-=1
#创建新线程
thread1 = Mthread(1,'thread-1',1)
thread2 = Mthread(2,'thread-2',2)

#开启新线程
thread1.start()
thread2.start()

#添加线程到线程列表
thread=[thread1,thread2]

#等待所有线程执行完毕
for x in thread:
    x.join()
print('所有线程执行完毕,退出主线程')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值