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()

     

  • 相关阅读:
    HTML5
    9.13 开课第十天(JS脚本语音:语句:循环)
    php函数
    php基础语法
    mysql常用函数整理
    数据库经典练习题整理
    数据库练习小结
    数据库:高级查询
    CRUD操作
    SQL语句
  • 原文地址:https://www.cnblogs.com/hq82/p/9851573.html
Copyright © 2011-2022 走看看