Python day11_线程

作者: g_s_007 | 来源:发表于2018-05-20 22:38 被阅读0次

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

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

    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_线程

        本文链接:https://www.haomeiwen.com/subject/yjxzdftx.html