线程的那点事情02 --事件

还是卖包子的故事, 我们在生产者消费者模型里面,消费者一直问有没有包子,生产者一直生产包子

那么可不可以这样,消费者过来问:有没有包子的时候,告诉他没有,等过会做好了,叫你。

我们可以通过event来做线程间信号传递

 1 __author__ = ‘Rico‘
 2 #coding:utf-8
 3
 4 import threading
 5 import time
 6
 7
 8 def Producer():
 9     print ‘cook:wait for somebody‘
10     event.wait()
11     event.clear()
12     print ‘cook:somebody is coming for baozi‘
13     print ‘make some baozi‘
14     time.sleep(5)
15     print ‘The baozi is ready‘
16     event.set()
17 def Consumer():
18     print u‘jack:go buy some baozi‘
19     event.set()
20     time.sleep(2)
21     while 1:
22         if event.is_set():
23             print  ‘Thinks‘
24             break
25         else:
26             print ‘Please do it quickly ‘
27             time.sleep(1)
28
29 event = threading.Event()
30 p = threading.Thread(target=Producer)
31 c = threading.Thread(target=Consumer)
32 p.start()
33 c.start()
时间: 2024-10-11 07:46:49

线程的那点事情02 --事件的相关文章

C#多线程:深入了解线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)

本篇继续介绍WaitHandler类及其子类 Mutex,ManualResetEvent,AutoResetEvent的用法..NET中线程同步的方式多的让人看了眼花缭乱,究竟该怎么去理解呢?其实,我们抛开.NET环境看线程同步,无非是执行两种操作:一是互斥/加锁,目的是保证临界区代码操作的"原子性":另一种是信号灯操作,目的是保证多个线程按照一定顺序执行,如生产者线程要先于消费者线程执行..NET中线程同步的类无非是对这两种方式的封装,目的归根结底都可以归结为实现互斥/ 加锁或者是

ios 独立创建一条线程,去做些事情

- (void)startLoop { [NSThread detachNewThreadSelector:@selector(loopMethod) toTarget:self withObject:nil]; } - (void)loopMethod { [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(toDo) userInfo:nil repeats:YES]; NSRunLoop *

Visual C++线程同步技术剖析:临界区,事件,信号量,互斥量

转自: 使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的了解应当在其处理任务完成后进行. 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解.例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题.如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数

线程进程,信号量,event事件,定时器,RLock,quene.Quene

cpu进程,核线程,都是并发几个 全局解释锁,多核cpu优势削弱 RLock用法与Lock一致,但是可以允许开启多个锁,但是也要关闭后,别的进程才能打开 信号量也是锁但是是一次可以进去几个. Seamaphore() 用法与Lock一致 Event好处是可以唤醒 事件# 是用于协调多个线程工作的,当一个线程要执行某个操作,需要获取另一个线程的状态# 你要给别人打电话 必须明确知道对方手机买好了# 作为客户端 要连接服务器 必须明确服务器已经启动了,那么作为启动服务器的一方 如何告知客户端?# 就

线程的那点事情

1.线程安全 首先我们知道线程是共享资源的,在这个基础上我们提出一个问题,如果我们有一个变量a = 0 然后10个线程都是给它+1的 然后我们执行这个10个线程,最后a = 10吗? 我们先看下面的代码 1 __author__ = 'Rico' 2 #_*_coding:utf-8_*_ 3 from threading import Thread 4 a = 0 5 class Plusone(Thread): 6 def __init__(self): 7 super(Plusone,se

【转】多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(上)

本篇从Monitor,Mutex,ManualResetEvent,AutoResetEvent,WaitHandler的类关系图开始,希望通过 本篇的介绍能对常见的线程同步方法有一个整体的认识,而对每种方式的使用细节,适用场合不会过多解释.让我们来看看这几个类的关系图: 1.lock关键字      lock是C#关键词,它将语句块标记为临界区,确保当一个线程位于代码的临界区时,另一个线程不进入临界区.如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放.方法是获取给定

[02]WPF异步响应,自定义事件、委托——多线程处理

题记 在编写有GUI的程序时,会遇到这样一种情形:用户点击了一个按钮,程序处理这个事件,然而这个处理过程耗时间较长.我们不想让软件卡在这里,而是让用户可以继续使用其他的软件功能.这种问题可以用多线程的事件响应来解决.这里,我就WPF的多线程事件响应做一个简单的归纳. 一.简单的异步的事件响应 在WPF中,针对简单的多线程处理过程,我们可以使用.NET自带的BackgroundWork完成.BackgroundWork的处理过程就是异步的,不会让用户界面停止响应. using System.Com

Qt经典—线程、事件与Qobject

(转自:http://www.cnblogs.com/newstart/archive/2013/07/20/3202118.html) 先决条件 考虑到本文并不是一个线程编程的泛泛介绍,我们希望你有如下相关知识: C++基础: Qt 基础:QOjbects , 信号/槽,事件处理: 了解什么是线程.线程与进程间的关系和操作系统: 了解主流操作系统如何启动.停止.等待并结束一个线程: 了解如何使用mutexes, semaphores 和以及wait conditions 来创建一个线程安全/可

QT中的线程与事件循环理解(2)

1. Qt多线程与Qobject的关系 每一个 Qt 应用程序至少有一个事件循环,就是调用了QCoreApplication::exec()的那个事件循环.不过,QThread也可以开启事件循环.只不过这是一个受限于线程内部的事件循环.因此我们将处于调用main()函数的那个线程,并且由QCoreApplication::exec()创建开启的那个事件循环成为主事件循环,或者直接叫主循环.注意,QCoreApplication::exec()只能在调用main()函数的线程调用.主循环所在的线程