多线程都是在同一个进程中运行的。因此在进程中的全局变量所有线程都是共享的,这就造成一个问题,因为线程执行的顺序是无序的,有可能会造成数据错误,为了解决这个问题,
threading提供了一个lock类,这个类可以在某个线程访问某个变量时加锁,其他线程此时不能进来,直到当前线程处理完后,把锁释放后,其他想线程才能进来处理。
示例代码如下:
#encoding: utf-8
import threading
VALUE = 0
gLock = threading.Lock()
def add_value():
global VALUE #引用全局变量VALUE
gLock.acquire() #加锁,在全局变量改变运用
for x in range(10000000):
VALUE +=1
gLock.release() #解锁
print('value:%d'%VALUE)
def main():
for x in range(2):
t = threading.Thread(target=add_value())
t.start()
if __name__ == '__main__':
main()