# 多线程操做共享数据---------------------------------------------------------------多线程
# import threading
# 使用锁
# 获取锁对象,全局惟一的
# lock = threading.Lock()ui
# 加锁(获取锁) 未获取到的线程会阻塞程序,知道获取到锁才会往下执行
# lock.acquire()线程
# 释放锁 归还锁,其余线程能够拿去用了
# lock.release()对象
# 注意:加锁和释放锁必须成对出现,不然就有可能形成死锁资源
# 为了不出现死锁,推荐用以下上下文管理器在加锁
# lock = threading.Lock()
# with lock: # with语句会在这个代码块执行前自动获取锁,在执行结束后自动释放锁
# 这里写本身的代码
# passget
# 使用锁的意义?
# 加锁是为了对锁内资源进行锁定,避免其余线程篡改已被锁定的资源同步
'''
线程同步:若是多个线程共同对某个数据进行修改,可能会出现不可预料的结果
为了保证数据的正确性,须要多多个线程进行同步
使用Thread对象的Lock和Rlock能够实现简单的线程同步,这个两个对象都有acquire方法和release方法
对于那些须要每次只容许一个线程操做的数据,能够将其操做放到acquire和release方法之间。it
'''thread
import threading
import timeimport
num = 0
lock = threading.Lock()
def func(st):
global num
print(threading.currentThread().getName() + ' try to acquire the lock')
if lock.acquire():
print(threading.currentThread().getName() + ' acquire the lock.')
print(threading.currentThread().getName() + " :%s" % str(num))
num += 1
time.sleep(st)
print(threading.currentThread().getName() + ' release the lock.')
lock.release()
t1 = threading.Thread(target=func, args=(8,))t2 = threading.Thread(target=func, args=(4,))t3 = threading.Thread(target=func, args=(2,))t1.start()t2.start()t3.start()