from threading import Thread, Lock
import time
num = 0
def test1():
global num
# 上锁
mutex.acquire()
for i in range(1000000):
num += 1
# 解锁
mutex.release()
print("--test1--num=%d" % num)
def test2():
global num
mutex.acquire()
for i in range(1000000):
num += 1
mutex.release()
print("--test2--num=%d" % num)
start_time = time.time() # 开始时间
# 创建一把互斥锁,默认没有上锁
mutex = Lock()
p1 = Thread(target=test1)
p1.start()
# time.sleep(3) # 取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?
p2 = Thread(target=test2)
p2.start()
p1.join()
p2.join()
end_time = time.time() # 结束时间
print("num = %d" % num)
print("运行时间:%fs" % (end_time - start_time)) # 结束时间-开始时间
"""
输出结果:
--test1--num=1000000
--test2--num=2000000
num = 2000000
运行时间:0.287206s
"""
from threading import Thread, Lock
import time
num = 0
def test1():
global num
for i in range(1000000):
# 上锁
mutex.acquire()
num += 1
# 解锁
mutex.release()
print("--test1--num=%d" % num)
def test2():
global num
for i in range(1000000):
# 上锁
mutex.acquire()
num += 1
# 解锁
mutex.release()
print("--test2--num=%d" % num)
start_time = time.time() # 开始时间
# 创建一把互斥锁,默认没有上锁
mutex = Lock()
p1 = Thread(target=test1)
p1.start()
# time.sleep(3) # 取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?
p2 = Thread(target=test2)
p2.start()
p1.join()
p2.join()
end_time = time.time() # 结束时间
print("num = %d" % num)
print("运行时间:%fs" % (end_time - start_time)) # 结束时间-开始时间
"""
输出结果:
--test1--num=1890838
--test2--num=2000000
num = 2000000
运行时间:4.694896s
"""
运行时间差别很大,锁放在什么位置合适呢?
你有没有放for 里面本质就不一样,锁的意义就是把并发变成串行,锁的放的位置根据需求来
我是在学习锁的使用,人家说锁的使用范围应该越小越好,看到运行时间我就懵了。
@三国小梦: 什么哦,你每次都把并发变成串行,你觉得for范围变小了???范围都是一样的没有变,反而会在原来的基础上加了198次开锁关锁,多出来的时间是这里