当使用多线程访问同一变量元素时候,为了保证数据的正确性安全性,必须要用到同步。
以下代码实现多线程运算100的递减:
#encoding=utf8
import threading
mylock = threading.RLock()
num=100
class myThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.t_name = name
def run(self):
global num #对num进行多线程递减
while True:
mylock.acquire() #对于进来的线程加锁,暂时不允许其他线程进入,其他线程等待
if num<=0:
mylock.release() #线程结束,释放线程
break
num-=1
print '\nThread(%s) released, Number: %d'%(self.t_name, num)
mylock.release() #加1成功之后,释放这个锁并通知刚刚在等待的线程可以执行,下一个线程在执行之时上锁如此循环
def test():
thread1 = myThread('A')
thread2 = myThread('B')
thread1.start()
thread2.start()
if __name__== '__main__':
test()