07-互斥锁import threading# 定义全局变量g_num = 0# 创建全局的互斥锁lock
Posted 我在黑马的日子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07-互斥锁import threading# 定义全局变量g_num = 0# 创建全局的互斥锁lock相关的知识,希望对你有一定的参考价值。
07-互斥锁
import threading
# 定义全局变量
g_num = 0
# 创建全局的互斥锁
lock = threading.Lock()
# 任务1 循环给全局变量每次加1
def test1():
# 上锁
lock.acquire()
for i in range(1000000):
global g_num
g_num += 1
print("test1:", g_num)
# 释放锁
lock.release()
# 任务2 循环给全局变量每次加1
def test2():
# 上锁
lock.acquire()
for i in range(1000000):
global g_num
g_num += 1
print("test2:", g_num)
# 释放锁
lock.release()
if __name__ == '__main__':
first_thread = threading.Thread(target=test1)
second_thread = threading.Thread(target=test2)
first_thread.start()
second_thread.start()
# 提示:互斥锁能保证同一时刻只能有一个线程去执行,注意点:如果加上互斥锁多任务瞬间变成单任务,性能变低了。
------------------------------------------------
08-核心代码上锁-----------------------------------
import threading
# 定义全局变量
g_num = 0
# 创建全局的互斥锁
lock = threading.Lock()
# 任务1 循环给全局变量每次加1
def test1():
for i in range(1000000):
# 上锁
lock.acquire()
global g_num
g_num += 1
# 释放锁
lock.release()
print("test1:", g_num)
# 任务2 循环给全局变量每次加1
def test2():
for i in range(1000000):
# 上锁
lock.acquire()
global g_num
g_num += 1
# 释放锁
lock.release()
print("test2:", g_num)
if __name__ == '__main__':
first_thread = threading.Thread(target=test1)
second_thread = threading.Thread(target=test2)
first_thread.start()
second_thread.start()
# 提示:互斥锁能保证同一时刻只能有一个线程去执行,注意点:如果加上互斥锁多任务瞬间变成单任务,性能变低了。
# 提示: 如果只关系结果不关心线程的执行顺序可以使用互斥锁,如果想要按照一定顺序同步执行可以使用join
-----------------------------------------------
09-死锁-----------------------------------------
# 死锁:相互等待对方释放的锁,但是对方一直不释放就称为死锁
import threading
import time
# 创建全局互斥锁
lock = threading.Lock()
# 取值操作,保证同一时刻只能由一个线程去取值
def get_value(index):
# 上锁,保证同一时刻只能有一个线程去取值
lock.acquire()
print(threading.current_thread())
my_list = [4, 6, 7, 9]
if index >= len(my_list):
print("下标越界:", index)
# 释放锁
lock.release()
return
# 根据下标去在列表中取值
value = my_list[index]
print(value)
time.sleep(0.001)
# 释放锁
lock.release()
if __name__ == '__main__':
# 模拟大量线程同时去取值
for i in range(10):
sub_thread = threading.Thread(target=get_value, args=(i,))
# 启动线程
sub_thread.start()
------------------------------------------------
以上是关于07-互斥锁import threading# 定义全局变量g_num = 0# 创建全局的互斥锁lock的主要内容,如果未能解决你的问题,请参考以下文章