zoukankan      html  css  js  c++  java
  • 线程同步

    大家都知道线程同步,是会资源强抢的,如果不在代码里加上锁,加以控制,结果就会出现非常的意外难以控制

    #GIL(全局解释器锁)

    #python中一个线程对应c语言中的-个线程

    #gil使的同一时刻只有一个线程在一个cup上执行字节码,无法将多个线程映射到多个cpu上执行
    #gil会根据执行的字节码行数以及时间片释放gil,io操作时会释放

    # import dis
    #
    #
    # def add(a):
    # a = a+1
    # return a
    # print(dis.dis(add))#回归c语言
    from threading import Lock,RLock#可重入的锁

    #在同一个线程里面,可以连续调用多次acquire,一定要注意acquire的次数要和release的次数相等

    total = 0
    lock = Lock()


    def add():
    global total
    # global lock
    for i in range(100000):
    lock.acquire()
    total += 1
    lock.release()


    def desc():
    global total
    # global lock
    for i in range(100000):
    lock.acquire()
    total -= 1
    lock.release()

    import threading

    thread1 = threading.Thread(target=add)
    thread2 = threading.Thread(target=desc)
    thread1.start()
    thread2.start()

    thread1.join()
    thread2.join()
    print(total)

    #1.用锁会影响性能
    #2.锁会引起死锁
  • 相关阅读:
    Spring-12-spring整合Mybatis
    Spring-11-AOP面向切面编程
    jQuery选择器之表单元素选择器
    phpsmarty分配变量
    angular
    ajax 第四步
    ajax第三步
    php+ajax+jq
    二十三种设计模式[4]
    二十三种设计模式[3]
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9385279.html
Copyright © 2011-2022 走看看