zoukankan      html  css  js  c++  java
  • 39_并发编程-信号量

    一、定义
     
      1、互斥锁同时只允许一个线程更改数据,而信号量Semaphore是同时允许一定数量的线程更改数据 。
      假设商场里有4个迷你唱吧,所以同时可以进去4个人,如果来了第五个人就要在外面等待,等到有人出来才能再进去玩。
     
      2、实现:
      信号量同步基于内部计数器,每调用一次acquire(),计数器减1;每调用一次release(),计数器加1.当计数器为0时,acquire()调用被阻塞。这是迪科斯彻(Dijkstra)信号量概念P()和V()的Python实现。信号量同步机制适用于访问像服务器这样的有限资源。信号量与进程池的概念很像,但是要区分开,信号量涉及到加锁的概念
     1 import time
     2 import random
     3 from multiprocessing import Process,Semaphore
     4 
     5 def dbj(i,s):
     6     s.acquire()
     7     print('%s号男主人公来洗脚'%i)
     8     print('-------------')
     9     time.sleep(random.randrange(3,6))
    10     # print(time.time())
    11     s.release()
    12 
    13 if __name__ == '__main__':
    14     s = Semaphore(4) #创建一个计数器,每次acquire就减1,直到减到0,那么上面的任务只有4个在同时异步的执行,后面的进程需要等待.
    15     for i in range(10):
    16         p1 = Process(target=dbj,args=(i,s,))
    17         p1.start()

     

  • 相关阅读:
    《Web 开发基础》专题系列
    《.NET 编程结构》专题汇总(C#)
    .NET Core:使用BarTender
    .NET Core:过滤器
    .NET Core:中间件
    .NET Core:Api版本控制
    .NET Core:Token认证
    .NET Core:SignalR
    .NET Core:跨域
    .NET Core:Json和XML
  • 原文地址:https://www.cnblogs.com/hq82/p/9851573.html
Copyright © 2011-2022 走看看