- 博客(13)
- 资源 (10)
- 收藏
- 关注
原创 zthread学习 实例十 线程间的协助(三)——死锁
同时满足以下4种条件,死锁就会发生:1、相互排斥。线程使用的资源至少有一个必须是不可共享的。在这种情况下,一根筷子一次只能被一个哲学家使用。2、至少有一个线程必须持有某一种资源,并且同时等待获得正在被另外的线程所持有的资源。也就是说要发生死锁一个哲学家必须持有一根筷子并且等待另一根筷子。3、不能以抢占的方式剥夺一个线程的资源。所有线程只能把释放的资源作为一个正常事件。他们不会从别的哲学家手中抢夺筷子。4、出一个循环等待。一个线程等待另外的线程所持有的资源,而这个等待的线程又等待另一个线程所持
2011-05-31 21:43:00 2431
转载 Overlay相关资料
Overlay(覆盖)是一种数字视频的显示技术,它允许数字信号不经过显示芯片处理,而直接通过显存输出到显示器屏幕上。Overlay显示模式最大的 用途在于优化视频播放。
2011-05-31 14:42:00 1209
原创 zthread学习 实例十 线程间的协助(一)
线程间协作:多个线程一起工作来共同解决某个问题(问题的某一部分必须在另一部分被解决之前解决完毕)
2011-05-30 14:18:00 1655
原创 zthread学习 实例八 任务终止(一)——观赏植物园
前面的几个例子中,使用了“退出标志”或Cancelable接口以适当的方式来终止一个任务,但某些情况下任务必须突然结束掉,这样终止任务将会所产生一些问题。举例:模拟计数,公园委员会想要了解每天有多少从通过公园的 多个 入口进入了。首先是一个互斥输出类,避免多个线程输出出现的混乱#ifndef DISPLAY_H#define DISPLAY_H#include "zthread/Cancelable.h"#include "zthread/ZThread.h"#include
2011-05-27 12:22:00 6078 1
原创 zthread学习 实例七 线程本地存储
消除任务在共享资源上发生冲突问题的第二种方法是 消除共享变量,对使用同一个变量的不同线程,可以为同一个变量创建不同的存储单元。因此,如果有5个线程使用一个含有变量x的对象,线程本地存储会自动为变量产生5个不同的存储单元。
2011-05-22 17:50:00 1612
原创 zthread学习 实例六 访问控制
Guard模板很方便的定义了同步机制,它在创建时用acquire()来获得一个Lockable对象,被销毁时用release()来释放这个锁。Guard对象的创建很好的利用了变量作用域概念。
2011-05-22 16:46:00 1718
原创 zthread学习 实例五 非任务对象的生存期
在使用线程处理时,必须确保非任务对象在任务需要它们的时候长期保留在活动状态,如果在任务完成之前,那些被任务使用的非任务对象已经被销毁,此时会导致非法访问存储单元。因此,那些被共享的非任务对象总要在堆中new出来,并且确保没有其他任务对象引用它时才动态销毁,此时就是引用计数。 ZThread库有一个引用计数的模板CountedPtr,它自动执行引用计数(执行拷贝构造函数时),并在引用计数归0时delete这个对象。每当有对象有被多于一个任务使用时,几乎总是需要使用CountedPtr来管理那些对象,以防由对角
2011-05-22 11:27:00 1484
原创 zthread学习 实例四 让步、休眠、优先级
1、让步Thread::yield()可以介入CPU的调度,使CPU强制放弃执行当前线程。2、休眠Thread:sleep()可以使线程停止执行一段时间。Thread:sleep()可发抛出一个Interrupted_Exception,该异常必须在run()函数中捕获,因为异常是不会跨线程传播的,只能在线程内部处理。3、优先级Thread::setPriority()、Thread::getPriority(),可以人为的改变到线程执行的优先
2011-05-21 23:10:00 2207
原创 zthread学习 实例三 使用Executor器来执行线程
Executor的种类,一个Executor对象,知道如何创建合适的语境来执行Runnable对象,不同的Executor对象有不同的任务执行方式,Executor是一个虚基类,其下派生了四种执行器:1、ThreadedExecutor:该执行器为每一个任务创建一个线程,当任务过多时,会导致过多的开销。 2、PoolExecutor:线程池,以一个有限的线程集来执行提交的任务。预先将开销很大的线程分配工作一次性做完,在可能的时候重用这些线程,这样做可以节省很多时间,因为不会为每一个线
2011-05-21 22:16:00 2997
原创 zthread学习 实例二
关于任务的结束:我们有一个CDisplayTask* pTask这样的任务指针,似乎我们可以在任务结束后使用delete来终止该任务,但这样会使程序变得不可靠,因为我们在销毁任务时,它可能正在做某些重要的处理。 由任务自己决定什么时候结束是最安全的。可以设一个标志,任务循环检查该标志,从run()退出时,先进行现场的清理工作,以此来达到线程的安全退出。
2011-05-21 21:15:00 1630
原创 zthread学习 实例一
分配给线程的任务必须是从堆中创建的 【Thread t(new LiftOff(5,i));】,而且通过new出来的任务不需要我们管理,Thread会自己管理该任务,当该任务的引用计数为0时,自动delete该任务。 还可以看到: for (int i = 0; i
2011-05-21 09:48:00 1970
ZThread库 Wince下的DLL版
2011-06-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人