python初识多线程锁lock

import time
import threading

lock = threading.RLock()

n = 10


def task(arg):
    # 加锁,此区域的代码同一时刻只能有一个线程执行
    lock.acquire()

    # 获取当前线程对象
    thread_obj = threading.current_thread()
    # 获取当前线程名字
    name = thread_obj.getName()

    global n
    n = arg
    time.sleep(1)
    print('当前线程', name, '修改后n的值为:', n)

    # 释放锁
    lock.release()


for i in range(5):
    t = threading.Thread(target=task, args=(i,))
    t.setName(str(i))
    t.start()

'''
期望结果-->加锁情况:
当前线程 0 修改后n的值为: 0
当前线程 1 修改后n的值为: 1
当前线程 2 修改后n的值为: 2
当前线程 3 修改后n的值为: 3
当前线程 4 修改后n的值为: 4
'''

'''
不期望结果-->没加锁情况
当前线程 0 修改后n的值为: 4
当前线程 1 修改后n的值为: 4
当前线程 2 修改后n的值为: 4
当前线程 3 修改后n的值为: 4
当前线程 4 修改后n的值为: 4
'''

猜你喜欢

转载自www.cnblogs.com/apollo1616/p/10350923.html