zoukankan      html  css  js  c++  java
  • 多线程之生产者和消费者模式

    思路:

    需要定义一个全局变量,供生产者和消费者使用

    1、对于生产者来说:x>0 wait(print) ,否则x+1(使用for循环)

    2、对于消费者来说:x==0 wait(print),否则x-1(使用for循环)

    3、生产者和消费者分别是一个class

     1 __author__ = 'anna'
     2 # coding: utf-8
     3 
     4 import threading
     5 x = 0  # 定义变量x
     6 
     7 
     8 class Producer(threading.Thread):
     9 
    10     def __init__(self, name):
    11         threading.Thread.__init__(self)
    12         self.name = name
    13 
    14     def run(self):
    15         # global语句可以声明一个或多个变量为全局变量,该声明仅仅在当前代码块中有效,除此之外,没有办法访问全局变量
    16         global x
    17         threadLock.acquire()
    18         if x > 0:
    19             print("我已经有东西了,再等等呗!")
    20         else:
    21             for i in range(6):
    22                 x += 1
    23                 print("%s正在生产,第%d个" % (self.name, x))
    24         threadLock.release()
    25 
    26 
    27 class Consumer(threading.Thread):
    28 
    29     def __init__(self, name):
    30         threading.Thread.__init__(self)
    31         self.name = name
    32 
    33     def run(self):
    34         global x
    35         threadLock.acquire()
    36         if x == 0:
    37             print("我没有东西了,我需要生产!")
    38         else:
    39             for i in range(5):
    40                 x -= 1
    41                 print("%s正在消费,第%d个" % (self.name, x))
    42         threadLock.release()
    43 
    44 threadLock = threading.Lock()
    45 p1 = Producer('我的生产者线程')
    46 p1.start()
    47 p1.join()  # 需要加上join方法,因为只有先生产才能消费,加上join方法不会导致错乱
    48 
    49 c1 = Consumer('我的消费者线程')
    50 c1.start()
    51 c1.join()
  • 相关阅读:
    C#与面向对象编程语言
    Windows Communication Fundation(WCF)的安装和一些疑惑
    Windows Communication Foundation入门(Part Two)
    Design & Pattern团队公告
    解决方案、项目、程序集、命名空间
    你注意到了吗?
    我的个人主页
    PetShop与设计
    CKEditor/CKFinder升级心得
    [转贴]基于UDP、TCP协议的C#网络编程之一
  • 原文地址:https://www.cnblogs.com/annatest/p/13357107.html
Copyright © 2011-2022 走看看