#!/usr/bin/env Python3
# -*- coding: utf-8 -*-
# @Software: PyCharm
# @virtualenv:workon
# @contact: 1040691703@qq.com
# @Desc:Code descripton
__author__ = '未昔/AngelFate'
__date__ = '2020/5/31 20:24'
from threading import Thread, Lock # 导入互斥锁Lock
num = 0
def work():
global num
l.acquire() # 这里表示调用互斥锁上锁方法,如果work函数先运行l.acquire的话,那么后边的程序就不能再修改和使用变量num。直到将其解锁后才能使用。
for i in range(1000000):
num += 1
print('work的num是%d' % num)
l.release() # 这里表示调用互斥锁解锁方法。
def works():
global num
l.acquire() # 这里表示调用互斥锁上锁方法。
for i in range(1000000):
num += 1
print('works的num是%d' % num)
l.release() # 这里表示调用互斥锁解锁方法。
l = Lock() # 实例化互斥锁,互斥锁是为了保护子线程不争抢数据而使用的一个类。
t = Thread(target=work)
tt = Thread(target=works)
t.start()
tt.start()
print('最后的num值是%d' % num) # 输出最后的结果
这里需要明白,主线程和子线程是同时进行的,因为创建子进程在前,最后输出再后,所以当最后线程输出的时候,子线程还在运行.
最后的num值是271556
work的num是1000000
works的num是2000000
Process finished with exit code 0