<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fengliping的专栏]]></title><description><![CDATA[初来咋到，有做的不妥的地方还请多多包含]]></description><link>https://blog.youkuaiyun.com/StudentFlp</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; StudentFlp]]></copyright><item><title><![CDATA[zthread学习 实例十五ZThread库基本结构的规纳]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850611</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850611</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:54:05 +0800</pubDate><description><![CDATA[1、四大基类

 Cancelable

Cancelable提供了通用的方法来定义语义，调用了cancel()的Cancelable对象，将被置为disable。调用过cancel()ed的对象不必立即中止工作。通常被cancel()ed的对象尽可能快的继续执行完当前分配给它的工作，然后再变得不可用；但它不能接受任何新分配给它的工作。

cancel()函数：使一个Cancelabl]]></description><category></category></item><item><title><![CDATA[zthread学习 实例十四 信号量机制]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850601</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850601</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:53:18 +0800</pubDate><description><![CDATA[ZThread库提供了另外一种同步机制——信号量，它定义了两种信号量：Semaphore(带上界) 和 CountingSemaphore(不带上界)，都类似于传统的信号量，下面例子说明了其用法：





[cpp] view
 plaincopy






#include "stdafx.h"  
#include "Display.h"  
#includ]]></description><category></category></item><item><title><![CDATA[zthread学习 实例十三 线程间的协助（四）——读者、写者]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850591</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850591</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:52:22 +0800</pubDate><description><![CDATA[对于读写问题，ZThread库专门封装了类（ReadWriteLock）来控制读写：



FairReadWriteLock (按FIFO的顺序进行读写控制):

  A FairReadWriteLock maintains a balance between the order read-only access and read-write access is allowed. ]]></description><category></category></item><item><title><![CDATA[zthread学习 实例十二 线程间的协助（三）——死锁]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850177</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850177</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:28:53 +0800</pubDate><description><![CDATA[因为线程可以变为阻塞，且因为对象可以拥有互斥锁，这些锁能够阻止线程在锁被释放之前访问这个对象。所以就有可能出现这种情况，某个线程在等待另一个线程而第2个线程又在等待别的线程，以此类推，直到这个链上的最后一个线程回头等待第1个线程。这样就会得到一个由互相等待的线程构成的连续的循环，而使任何线程都不能运行——死锁。死锁的过程是很难重现的，调试的难点。

下面看一个经典的死锁问题——哲学家聚餐。
]]></description><category></category></item><item><title><![CDATA[zthread学习 实例十一 线程间的协助（二）]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850157</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850157</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:28:43 +0800</pubDate><description><![CDATA[例一、生产者-消费者

 

 

一个任务制作烤面包（生产者），一个任务给烤面包抹黄油（消费者），还有一个任务是往抹好黄油的烤面包上抹果酱（消费者）。

代码如下：





[cpp] view
 plaincopy






#include "stdafx.h"  
#include "zthread/FastMutex.h"  
#inc]]></description><category></category></item><item><title><![CDATA[zthread学习 实例九 任务终止（二）——中断方式]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850133</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850133</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:26:23 +0800</pubDate><description><![CDATA[引起线程变为阻塞状态的原因有：

1、调用了sleep()，线程进入休眠状态。

2、调用了wait()，挂起了线程的运行。

3、线程正在等待某个I/0操作完成(此时中断是不会出现的)。

4、线程在尝试进入一段被一个互斥锁保护的代码块，而那个互斥锁已经被其他线程获得。

 


终止一个阻塞线程和终止一个非阻塞线程的方式有很大的不同。

 

终止一个阻塞线程]]></description><category></category></item><item><title><![CDATA[zthread学习 实例十 线程间的协助（一）]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850141</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850141</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:26:16 +0800</pubDate><description><![CDATA[使用线程在同一时刻运行多个任务时，可以使用互斥锁来同步多个任务，阻止一个任务干扰另一个任务的资源。也就是说，使用互斥锁来保证同一时刻只允许一个任务访问共享资源。

 

 

线程间协作：多个线程一起工作来共同解决某个问题(问题的某一部分必须在另一部分被解决之前解决完毕)。

 

 

ZThread库中使用 互斥锁 并允许 挂起 的基类Condition,可以通过wai]]></description><category></category></item><item><title><![CDATA[zthread学习 实例八 任务终止（一）——观赏植物园]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850127</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850127</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:25:43 +0800</pubDate><description><![CDATA[前面的几个例子中，使用了“退出标志”或Cancelable接口以适当的方式来终止一个任务，但某些情况下任务必须突然结束掉，这样终止任务将会所产生一些问题。

 

举例：模拟计数，公园委员会想要了解每天有多少从通过公园的 多个 入口进入了。

首先是一个互斥输出类，避免多个线程输出出现的混乱





[cpp] view
 plaincopy






]]></description><category></category></item><item><title><![CDATA[zthread学习 实例七 线程本地存储]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850113</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850113</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:24:20 +0800</pubDate><description><![CDATA[消除任务在共享资源上发生冲突问题的第二种方法是 消除共享变量，对使用同一个变量的不同线程，可以为同一个变量创建不同的存储单元。因此，如果有5个线程使用一个含有变量x的对象，线程本地存储会自动为变量产生5个不同的存储单元。






[cpp] view
 plaincopy






#include "stdafx.h"  
#include   
#inc]]></description><category></category></item><item><title><![CDATA[zthread学习 实例六 访问控制]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850101</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850101</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:23:33 +0800</pubDate><description><![CDATA[就是对共享资源的同步访问，以免造成不确定的状态。

Zhread库是基于Mutex临界区来组建同步机制的。






[cpp] view
 plaincopy






#include "stdafx.h"  
#include   
#include   
  
#include "zthread/Guard.h"  
#include "zt]]></description><category></category></item><item><title><![CDATA[zthread学习 实例五 非任务对象的生存期]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850083</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850083</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:21:54 +0800</pubDate><description><![CDATA[在使用线程处理时，必须确保非任务对象在任务需要它们的时候长期保留在活动状态，如果在任务完成之前，那些被任务使用的非任务对象已经被销毁，此时会导致非法访问存储单元。因此，那些被共享的非任务对象总要在堆中new出来，并且确保没有其他任务对象引用它时才动态销毁，此时就是引用计数。

      ZThread库有一个引用计数的模板CountedPtr来管理那些对象，以防由对角生存期争端而产生的问题。]]></description><category></category></item><item><title><![CDATA[zthread学习 实例四 让步、休眠、优先级]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850073</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850073</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:21:15 +0800</pubDate><description><![CDATA[1、让步

Thread::yield()可以介入CPU的调度，使CPU强制放弃执行当前线程。

 

2、休眠

Thread:sleep()可以使线程停止执行一段时间。

Thread:sleep()可发抛出一个Interrupted_Exception，该异常必须在run()函数中捕获，因为异常是不会跨线程传播的，只能在线程内部处理。

 

3、优先级

T]]></description><category></category></item><item><title><![CDATA[zthread学习 三 使用Executor器来执行线程]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850065</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850065</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:21:05 +0800</pubDate><description><![CDATA[[cpp] view
 plaincopy






#include "stdafx.h"  
#include   
#include "zthread/PoolExecutor.h"  
#include "zthread/ThreadedExecutor.h"  
#include "zthread/ConcurrentExecutor.h"  
#includ]]></description><category></category></item><item><title><![CDATA[zThread学习 二]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850055</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850055</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:20:15 +0800</pubDate><description><![CDATA[[cpp] view
 plaincopy






#include "stdafx.h"  
#include   
#include   
#include "zthread/Thread.h"  
#include "zthread/Runnable.h"  
#include "zthread/PoolExecutor.h"    
  
using na]]></description><category></category></item><item><title><![CDATA[zThread学习 一]]></title><link>https://blog.youkuaiyun.com/StudentFlp/article/details/45850035</link><guid>https://blog.youkuaiyun.com/StudentFlp/article/details/45850035</guid><author>StudentFlp</author><pubDate>Tue, 19 May 2015 21:17:32 +0800</pubDate><description><![CDATA[[cpp] view
 plaincopy






#include "stdafx.h"  
#include   
#include "zthread/Runnable.h"  
#include "zthread/PoolExecutor.h"    
  
using namespace ZThread;  
using namespace std;  
]]></description><category></category></item></channel></rss>