Python,多线程,线程锁 练习

188 阅读1分钟

关键字:Python,多线程,线程锁 

# 导入线程模块
from threading import Thread
import threading

# 定义一个总数计数
num = 0
# 定义一个线程将增加num
def thread1(count):
    global num
    for i in range(count):
        # 线程锁上锁,只能执行上锁之后的代码
        lock1.acquire()
        num += 1
        lock1.release()
    print(num)

# 定义一个线程增加num
def thread2(count):
    global num
    for i in range(count):
        # 线程锁上锁,只能执行上锁之后的代码
        lock1.acquire()
        num += 1
        lock1.release()
    print(num)

# 定义一个线程锁
lock1 = threading.Lock()
t1 = Thread(target=thread1, args=(1000000, ))
t2 = Thread(target=thread2, args=(1000000, ))
# enumerate返回线程个数,返回值为一个列表,线程未开始时只显示主线程一个线程
print(threading.enumerate())
t1.start()
t2.start()
# enumerate返回线程个数,返回值为一个列表,当两个线程开始执行后返回三个线程
print(threading.enumerate())

使用线程锁之前,线程之间抢占资源,计算稍大的数据出现错误

使用线程锁之后 ,避免了资源抢占,计算大数据不出错