• python3之线程


    1线程的创建:

    import threading
    import time,random
    
    
    def text1():
        while True:
            print(1111111)
            time.sleep(random.random()*2)
    
    def text2():
        while True:
            print(2222222)
            time.sleep(random.random() * 2)
    def main():
        # text1()
        # text2()
    
        #创建多线程
        t1 = threading.Thread(target=text1)
        t2 = threading.Thread(target=text2)
        t1.start()  #执行多线程
        t2.start()
    
    if __name__ == "__main__":
        main()
    

     2互斥锁:

    在多线程之中全局变量是共享的;在执行过程中又可能会发生资源竞争,所以会用到互斥锁:比如

    import threading
    import time,os,random
    
    num = 0
    def text1(agr):
        global num
        for i in range(agr):
            num += 1
        print(num)
    
    def text2(agr):
        global num
        for i in range(agr):
            num += 1
        print(num)
    
    
    def main():
    
        t1 = threading.Thread(target=text1,args=(1000000,))
        t2 = threading.Thread(target=text2,args=(1000000,))
        t1.start()
        t2.start()
    
        time.sleep(5)
        print(num)
    
    if __name__ == "__main__":
        main()
    

     执行结果:如下,而不是我们向看到的2000000

    1170362
    1302259
    1302259
    

     如何解决呢,用到互斥锁:

    import threading
    import time,os,random
    
    num = 0
    def text1(agr,mutex):
        global num
        for i in range(agr):
            mutex.acquire()  #上锁
            num += 1
            mutex.release()  #解锁
        print(num)
    
    def text2(agr,mutex):
        global num
        for i in range(agr):
            mutex.acquire()  #上锁
            num += 1
            mutex.release() #解锁
    
        print(num)
    
    
    def main():
        mutex = threading.Lock()  #创建一个互斥锁
        t1 = threading.Thread(target=text1,args=(1000000,mutex))
        t2 = threading.Thread(target=text2,args=(1000000,mutex))
        t1.start()
        t2.start()
    
        time.sleep(5)
        print(num)
    
    if __name__ == "__main__":
        main()
    

     结果:

    1846157
    2000000
    2000000
    
  • 相关阅读:
    【BZOJ 2440】[中山市选2011]完全平方数
    【BZOJ 1066】[SCOI2007]蜥蜴
    luogu P1317 低洼地
    luogu P1379 八数码难题
    luogu P1886 滑动窗口
    luogu P1032 字串变换
    题解 P1876 【开灯】
    题解 P1720 【月落乌啼算钱】
    题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】
    关于线性回归
  • 原文地址:https://www.cnblogs.com/yan-peng/p/9972606.html
Copyright © 2020-2023  润新知