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)

    运行结果:

  • 相关阅读:
    使用MAVEN打JAR,直接使用
    回溯法最优装载问题(java)
    js-object引用示例
    网页自适应布局方案
    ajax的工作原理
    通过SublimeCodeIntel设置JavaScript自动补全
    sublime的Package Control的安装及使用
    Opencv 简单视频播放器
    OpenCV_复制一个或多个ROI图像区域
    OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
  • 原文地址:https://www.cnblogs.com/xudj/p/10345699.html
Copyright © 2011-2022 走看看