Python day11_线程

## 多线程共享全局变量 但是 因为线程执行是无须的 所以会出现资源竞争的问题 如下所示


Python day11_线程_第1张图片

这样会导致得到的数据不符合我们的期望。为了解决资源竞争的问题,线程中有两个解决办法:

1. 线程同步,第一个线程执行完毕后,第二个才开始,如上图25行

2. 利用互斥锁,如下代码:

import threading

num = 0

# 创建互斥锁

lock = threading.Lock()

# 任务1:循环1000000次每循环1次全局变量加1

def sum1():

    # 上锁

    lock.acquire()

    global num

    for i in range(1000000):

      num += 1

    print("sum1:", num)

    # 释放锁

    lock.release()

# 任务2:循环10000000次每循环1次全局变量加1

def sum2():

    # 上锁

    lock.acquire()

    global num

    for i in range(1000000):

        num += 1

    print("sum2:", num)

    # 释放锁

    lock.release()

if __name__ == '__main__':

    # 创建两个线程分别执行对应相加任务

    first_thread = threading.Thread(target=sum1)

    second_thread = threading.Thread(target=sum2)

    first_thread.start()

    second_thread.start()

    # 互斥锁: 保证同一时刻只有一个线程去执行代码,其它线程没有抢到锁会等待

    # 提示:加上互斥锁,哪个线程抢到锁我们决定不了,因为,线程执行是无序

    # 注意点: 线程同步和加上互斥锁把多任务瞬间该成单任务,性能会下降

# 注意:加上锁之后要及时释放锁,否则会出现死锁。


Python day11_线程_第2张图片

你可能感兴趣的:(Python day11_线程)