欢迎来到天天文库
浏览记录
ID:40811693
大小:2.95 MB
页数:14页
时间:2019-08-08
《分布式队列和动态任务调度器的设计接口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、6.线程池的实现共享资源计算的分解共享资源的设计思路1.线程分组竞争模式2.线程随机竞争模式3.条件同步模式4.批量私有化处理模式5.数据本地化相关解决思路的数据结构:1.串行队列,环行队列(缺点:空间不足时,重新扩大空间后需要复制数据,复制大量数据很费时间),2.有既能将队列动态扩大,又不需要复制数据的队列结构吗?动态环行队列:多个环行队列组成的缘故动态环行队列。(用于管理内存碎片)上面这两种队列都是适用于单个线程内使用的情形。如果有多个线程要操作队列,上述队列是不能提供数据竞争的安全的。要想让队列在多个线程操作的情形下取得安全,必须使用
2、加锁、解锁等同步操作。3.支持同步的共享队列(1)要理解竞争资源(硬件、软件(变量,队列,数组,链表等))线程,资源竞争,信号量,互斥、同步,锁,原子操作共享队列的进队和出队操作仅仅是在串行队列的进队和出队基础上进行了锁保护,队列判空和满时也必须加锁,以避免线程同时操作串行队列内的数据结构。4.偷取的共享队列(队列判空和满时不必须加锁)设置两个标志变量来表示队列为空和满,使用原子操作改变标志变量的值。在分布式队列和任务调度器的设计和实现中需要用到偷取的共享队列。5.队列池如何避免共享队列资源的集中式锁竞争的现象?解决方案:队列池。将一个队列
3、变成多个子队列,每个子队列带一把锁,多个共享子队列组成的复合数据结构称为队列池。队列池的操作有:单进单出操作、多进多出操作线程分组竞争模式,线程随机竞争模式队列池的优点:缩减了队列空满判断时的同步操作缺点:无法减少进队和出队操作中的同步操作,解决方案:分布式队列7.分布式队列的设计和实现主要思想是,共享数据本地化,线程池。带有私有化操作的分布式队列7.多核下任务调度器静态任务图调度器动态任务调度非嵌套任务调度任务分组任务分组调度嵌套任务调度请大家自学C++模板设计方案1.设计并实现一个自动释放锁功能的类CScopedLock(已经有代码,大
4、家会用就可以)接口如下:(1)设计并实现一个可以获取和释放锁功能的类CFastLock#defineFASTLOCKCRITICAL_SECTION#defineFastLockInit(x)InitializeCriticalSection(x)#defineFastLockAcquire(x)EnterCriticalSection(x)#defineFastLockTryAcquire(x)TryEnterCriticalSection(x)#defineFastLockRelease(x)LeaveCriticalSection(x
5、)#defineFastLockClose(x)DeleteCriticalSection(x)classCFastLock{private:FASTLOCKm_Lock;public:CFastLock();~CFastLock();voidAcquire();intTryAcquire();voidRelease();voidRelease(UINTuType){};//空的函数,主要是保持和CScopedLock类的兼容性};CFastLock::CFastLock(){FastLockInit(&m_Lock);}CFastLock
6、::~CFastLock(){FastLockClose(&m_Lock);}voidCFastLock::Acquire(){FastLockAcquire(&m_Lock);}intCFastLock::TryAcquire(){intnRet;nRet=FastLockTryAcquire(&m_Lock);returnnRet;}voidCFastLock::Release(){FastLockRelease(&m_Lock);}(1)在CFastLook的基础上,实现CScopedLocktemplateclass
7、CScopedLock{private:T*m_pLock;UINTm_uType;public://构造函数为CFastLock,CSpinLock而使用CScopedLock(T&l):m_uType(0){m_pLock=&l;m_pLock->Acquire();};//下面的构造函数主要为读写锁CRWLock而使用CScopedLock(T&l,UINTuType):m_uType(uType){m_pLock=&l;m_pLock->Acquire(uType);};~CScopedLock(){if(m_pLock!=NULL
8、){if(!m_uType){m_pLock->Release();}else{m_pLock->Release(m_uType);}}};};1.串行环行队列接口(T表示队列中
此文档下载收益归作者所有