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.锁会引起死锁
  • 相关阅读:
    HDU 4901 The Romantic Hero
    COGS8 备用交换机
    POJ 1466 Girls and Boys
    bzoj3442 学习小组
    bzoj2054 疯狂的馒头
    POJ2135 Farm Tour
    POJ 1149 PIGS
    Html5 Canvas学习之路(五)
    关于跨域简单总结
    vue-baidu-map 进入页面自动定位的解决方案!
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9385279.html
Copyright © 2011-2022 走看看