zoukankan      html  css  js  c++  java
  • Python--day41--线程锁

    1,死锁

    死锁代码示例:

     1 import time
     2 from threading import Lock, Thread
     3 
     4 noodle_lock = Lock()
     5 fork_lock = Lock()
     6 
     7 def eat1(name):
     8     noodle_lock.acquire()
     9     print('%s拿到面了'%name)
    10     fork_lock.acquire()
    11     print('%s拿到叉子了'%name)
    12     print('%s吃面'%name)
    13     fork_lock.release()
    14     noodle_lock.release()
    15 
    16 def eat2(name):
    17     fork_lock.acquire()
    18     print('%s拿到叉子了' % name)
    19     time.sleep(1)
    20     noodle_lock.acquire()
    21     print('%s拿到面了'%name)
    22     print('%s吃面'%name)
    23     noodle_lock.release()
    24     fork_lock.release()
    25 
    26 Thread(target=eat1,args=('alex',)).start()
    27 Thread(target=eat2,args=('Egon',)).start()
    28 Thread(target=eat1,args=('bossjin',)).start()
    29 Thread(target=eat1,args=('nezha',)).start()

    运行结果:

    2,线程锁只能保证同一时间只有一个线程取n值,并不能保证数据安全

    3,加锁保证了n不会被多个线程操纵;加锁保证数据安全

     1 import time
     2 from threading import Lock,Thread
     3 
     4 def func(lock):
     5     global n
     6     #加锁保证了n不会被多个线程操纵
     7     #获取锁的钥匙,加锁
     8     lock.acquire()
     9     temp = n
    10     time.sleep(0.2)#睡眠0.2s
    11     n = temp -1
    12     #释放锁
    13     lock.release()
    14 
    15 n = 10
    16 t_lst = []
    17 lock = Lock()
    18 for i in range(10):
    19     t = Thread(target=func,args=(lock,))
    20     t.start()
    21     t_lst.append(t)
    22 
    23 
    24 for t in t_lst:t.join()
    25 print(n)

    运行结果:

  • 相关阅读:
    1065 01字符串
    poj 1321 棋盘问题
    0608模拟算法试题
    唯一的雪花
    2969 角谷猜想
    0607枚举算法试题
    3162 抄书问题(划分dp)
    8782:乘积最大(划分dp)
    2985:数字组合
    3531:判断整除
  • 原文地址:https://www.cnblogs.com/xudj/p/10345699.html
Copyright © 2011-2022 走看看