zoukankan      html  css  js  c++  java
  • 互斥锁

    • 锁有两种状态——锁定和未锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”状态,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

    • 使用 Thread 对象的 Lock 可以实现简单的线程同步,有上锁 acquire 方法和 释放release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire release 方法之间。

    •  1 import time
       2 from threading import Thread,Lock
       3 #定义全局变量num
       4 num=0
       5 #创建一把互斥锁
       6 lock = Lock()
       7 def test1():
       8     global num
       9     '''
      10     在两个线程中都调用上锁的方法,则这两个线程就会抢着上锁,
      11     如果有1方成功上锁,那么导致另外一方会堵塞(一直等待)直到这个锁被解开
      12     '''
      13     lock.acquire()#上锁
      14     for i in range(100000):
      15         num+=1
      16     lock.release()
      17     print('test1输出num:',num)
      18 
      19 def test2():
      20     global num
      21     lock.acquire()  # 上锁
      22     for i in range(100000):
      23         num+=1
      24     lock.release()
      25     print('test2输出num:',num)
      26 
      27 if __name__=='__main__':
      28     t1 = Thread(target=test1)
      29     t2 = Thread(target=test2)
      30     t1.start()
      31     t2.start()
      32     t1.join()
      33     t2.join()
      1 test1输出num: 100000
      2 test2输出num: 200000
    正是江南好风景
  • 相关阅读:
    Java 开发必装的 IntelliJ IDEA 插件
    paoding-rose 之 maven配置
    jetty之maven配置
    paoding rose controller包及文件名命名规则
    PowerMock进行mock测试
    谈谈我的windows服务器运维管理
    谈谈RPC中的异步调用设计
    系统:WSL(win10的子系统Linux)
    信息安全攻防基础
    线性规划计算工具Lingo
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12682808.html
Copyright © 2011-2022 走看看