多线程互斥锁信号量

例1:线程加锁

import threading
import time
num=0
def run(n):
    lock.acquire()
    global num
    num+=1
    print("task start",n)
    time.sleep(2)
    print("task done=>",n,'num=%d'%num)
    print(threading.current_thread())
    lock.release()
def run1():
    print('hello')
start_time=time.time()
lock=threading.Lock()
for i in range(5):
    t=threading.Thread(target=run,args=('t-%s'%i,))
    t.start()

t1=threading.Thread(target=run1)
print(threading.current_thread())
t1.start()
print(threading.current_thread())
print(threading.active_count())
print(threading.current_thread())
print('cost:',time.time()-start_time)

例2:信号量

import threading,time
num = 0

def run(n):
    t_sema.acquire()
    print('task start!')
    global num
    num+=1
    print("task done",n,'num=%d'%num)
    time.sleep(2)
    t_sema.release()

t_sema = threading.BoundedSemaphore(5)
l_th=[]
for i in range(20):
    t=threading.Thread(target=run,args=('t->%s'%i,))
    l_th.append(t)
    t.start()

# for i in l_th:
#     i.join()
print(num)
print('DONE')

加锁和信号量的本质是相同的,只不过加锁是一个,信号量是多个。可参考阮一峰日志中的讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值