zthread学习 实例五 非任务对象的生存期

ZThread多线程库学习笔记整理二 通过第一阶段的工程部署,多线程管理库ZThread.lib和ZThread.dll已经生成,不过为了更好的使用该库和弄懂该库的实现机制,我们可能需要生成该库的帮助文档,在Linux下,大家可以参考相关的Makefile文件,利用make工具即可很好的生成该doc目录下的html格式的帮助文档,但是需要部署工具doxygen,因为整个文档的注释都是以该工具的语法格式生成的。 doxygen工具的下 阅读详情

在使用线程处理时,必须确保非任务对象在任务需要它们的时候长期保留在活动状态,如果在任务完成之前,那些被任务使用的非任务对象已经被销毁,此时会导致非法访问存储单元。因此,那些被共享的非任务对象总要在堆中new出来,并且确保没有其他任务对象引用它时才动态销毁,此时就是引用计数。

      ZThread库有一个引用计数的模板CountedPtr<>,它自动执行引用计数(执行拷贝构造函数时),并在引用计数归0时delete这个对象。每当有对象有被多于一个任务使用时,几乎总是需要使用CountedPtr<>来管理那些对象,以防由对角生存期争端而产生的问题。


[cpp]  view plain copy
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include <fstream>  
  4. #include "zthread/Thread.h"  
  5. #include "zthread/Runnable.h"  
  6. #include "zthread/PoolExecutor.h"    
  7.   
  8. using namespace ZThread;  
  9. using namespace std;  
  10.   
  11. class CCount  
  12. {  
  13. public:  
  14.     void increment()  
  15.     {  
  16.         for (int i = 0; i < 100; i ++)  
  17.         {  
  18.             n[i]++;  
  19.         }  
  20.         //n++;  
  21.     }  
  22. private:  
  23.     int n[100];  
  24.     //int n;  
  25. };  
  26.   
  27. class Incrementer : public Runnable  
  28. {  
  29. public:  
  30.     //Incrementer(CCount* pC) : pCount(pC){}  
  31.     Incrementer(const CountedPtr<CCount>& pC) : pCount(pC){}  
  32.     void run()  
  33.     {  
  34.         for (int i = 100; i > 0; i--)  
  35.         {  
  36.             Thread::sleep(100);  
  37.             pCount->increment();  
  38.             cout << i << endl;  
  39.         }  
  40.     }  
  41. private:  
  42.     //CCount* pCount;  
  43.     CountedPtr<CCount> pCount;  
  44. };  
  45.   
  46.   
  47. int _tmain(int argc, _TCHAR* argv[])  
  48. {  
  49.     //CCount count;  
  50.     CountedPtr<CCount> pCount(new CCount);  
  51.     try  
  52.     {  
  53.         //Thread t0(new Incrementer(&count));  
  54.         //Thread t1(new Incrementer(&count));  
  55.   
  56.         Thread t0(new Incrementer(pCount));  
  57.         Thread t1(new Incrementer(pCount));  
  58.     }  
  59.     catch (Synchronization_Exception&  e)  
  60.     {  
  61.         cerr << e.what() <<endl;  
  62.     }  
  63.     return 0;  
  64. }  

代码中注释起来的在栈中定义的CCount对象,会出现非法访问的错误。

而由CountedPtr<>模板管理的CCount对象,在任务两次对它引用时都会增1,只要任务运行,计数就会非0,当使用CCount对象的所有任务全部完成时(此时引用计数归0),才会delete  CCount对象。

zthread线程库 zthread线程库提供了各种线程、线程池、队列、各种锁的支持,还能跨平台哦。 立即下载

相关推荐

zthread2.3.2 代码和lib

zthread2.3.2 代码 lib zthread2.3.2 代码 lib

zthread库类型总结 .

Runnable            //执行任务的接口     Cancelable          //可取消任务接口     Waitable            //任务可阻塞等待接口     Thread              //线程类     ThreadedExecutor    //线程执行器,为每个Runnable任务创建一个线程     PoolExe

516

ZThread源文件及Window下编译生成的文件

ZThread的最新源文件及自己编译生成的静态库文件,动态库文件,可以直接用来进行C++的并发编程,也可以自己编译,Windows及Linux的编译方法见http://blog.youkuaiyun.com/lanbing510/article/details/8441258

IBM的ZThread库

下载地址去除调试信息:在Debug.h中的最前端增加#define ZTDEBUG(x),忽略警告,DONE这个库用起来应该比Linux系统下提供的并发的借口要来的舒坦,不知道有没有TBB快速,但是可以肯定的是为程序员省掉了很多代码的编辑工作。Mark一下,认真学习之。当需要使用多线程库的时候,需要从Runnable共有继承产生一个类,然后重新定义run()函数代码如下:#include #include "zthread/Runnable.h" #include "zthread/Thread.h"

hitrose27的专栏 3222

ZThread-2.3.2

C++ 多线程 编程

DenseNet训练实践

在Cifar10上训练DenseNet,复现DenseNet论文的结果是后面两篇分析工作的基础,因此本系列的第一篇,将首先讨论深度学习的训练过程中的几个方面: 1. 数据集 1.1 Cifar10数据集 Cifar10数据集有6万张32X32的图片,是一个小型的数据集,但数据的复杂度足够,下图来自DenseNet论文,可以看出,不用数据增强的话,ResNet的正确率也很难超过90%,因而足以用来验...

一蓑烟雨任平生 1万+

zthread的简单使用

#include "stdafx.h" #include #include "zthread/PoolExecutor.h" #include "zthread/ThreadedExecutor.h" #include "zthread/ConcurrentExecutor.h" #include "zthread/SynchronousExecutor.h" #include "z

c1s2d3n4cs的博客 315

Zemax实现微透镜阵列光束整形(原理+仿真)

通过Zemax实现微透镜阵列的光场整形仿真。

VJCP_90909Bu0的博客 1万+

zthread学习 实例四 让步、休眠、优先级

1、让步 Thread::yield()可以介入CPU的调度,使CPU强制放弃执行当前线程。   2、休眠 Thread:sleep()可以使线程停止执行一段时间。 Thread:sleep()可发抛出一个Interrupted_Exception,该异常必须在run()函数中捕获,因为异常是不会跨线程传播的,只能在线程内部处理。   3、优先级 T

fengliping的专栏 671

攀藤PMS系列传感器STM32驱动开发与数据解析实战

本文详细介绍了攀藤PMS系列传感器与STM32微控制器的驱动开发与数据解析实战,涵盖硬件连接、数据协议解析、驱动源码编写及数据处理优化。重点解析了传感器数据帧结构,提供了完整的STM32驱动实现代码,并分享了实际应用中的问题排查与性能优化经验,帮助开发者快速实现高精度颗粒物浓度检测。

milk8的博客 348

STGCN实战:从零构建PyTorch时空图卷积网络预测城市交通流

本文详细介绍了如何使用PyTorch从零构建时空图卷积网络(STGCN)进行城市交通流预测。通过将交通网络建模为图结构,并融合时间卷积与空间图卷积,STGCN能有效捕捉交通流的时空依赖性。文章提供了从数据预处理、核心模块(TimeBlock与STGCNBlock)搭建、模型训练到实战技巧的完整指南,帮助开发者快速掌握这一前沿的交通速度预测技术。

wasm7browser的博客 249

跨平台线程库 ZThread入门

 由于要用到多线程技术,之前用过windows API,但那是windows平台的。想试一下跨平台的,网上说boost有线程库,但那是个庞然大物,编译麻烦。无意中看见Zthread,这个小巧玲珑, sourceforge就有源码下载。第一次运行就成功了,好神奇啊! 小例子:   #include &lt;iostream&gt; #include &lt;zthread/Runnable....

westice的专栏 530

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战中文教程,旨在帮助用户从零开始掌握这一先进的仿真框架。内容涵盖从环境安装、运行第一个“Hello World”仿真,到深入理解实体、组件、想定编辑器等核心概念,并进阶探讨动力学建模、传感器仿真与红蓝对抗想定构建。最后,指南还提供了效能分析与实战排错技巧,帮助用户将仿真结果转化为有价值的量化数据,适用于军事、航空航天等领域的复杂系统行为模拟研究。

weixin_29294395的博客 359

zthread学习 实例五 非任务对象的生存期

在使用线程处理时,必须确保非任务对象在任务需要它们的时候长期保留在活动状态,如果在任务完成之前,那些被任务使用的非任务对象已经被销毁,此时会导致非法访问存储单元。因此,那些被共享的非任务对象总要在堆中new出来,并且确保没有其他任务对象引用它时才动态销毁,此时就是引用计数。 ZThread库有一个引用计数的模板CountedPtr,它自动执行引用计数(执行拷贝构造函数时),并在引用计数归0时delete这个对象。每当有对象有被多于一个任务使用时,几乎总是需要使用CountedPtr来管理那些对象,以防由对角

Jarry's World 1598

新手如何学习车载底层嵌入式软件开发(AutoSar)

汽车嵌入式开发

ACarSoft的博客 4221

Matlab_Marr小波尺度变换图

多尺度的连续小波变换分解后时间尺度图 墨西哥Marr小波函数: %delta 小波变换尺度 %N     小波函数的长度 %s     原始信号 %g     原始信号某个尺度下的小波变化系数 function g=Singularity_Detection(delta,N,s); %保持信号长度 n=length(s); % 构造墨西哥小帽小波函数 for index_x=1

桔色小西瓜 6602

zthread学习 实例十二 ZThread库基本结构的规纳

 1、四大基类 CancelableCancelable提供了通用的方法来定义语义,调用了cancel()的Cancelable对象,将被置为disable。调用过cancel()ed的对象不必立即中止工作。通常被cancel()ed的对象尽可能快的继续执行完当前分配给它的工作,然后再变得不可用;但它不能接受任何新分配给它的工作。cancel()函数:使一个Cancelab

Jarry's World 2769

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 651

windows平台下编译zThread库

今天看到《c++编程思想》中并发一章,作者使用zThread这个开源库来讲解,于是我也下了个版本编译,并简单使用了下,以下是具体步骤:  一、创建工程       1.下载源码        由于官网http://zthread.sourceforge.net一直上不去,所以我从http://download.chinaunix.net/download.php?id=24079&Resou

sunchenx的专栏 2211

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ZThread库试用小记

  昨天刚down了个ZThread,这个库主要用来开发c++的多线程应用。  那么我写的demo是使用windows平台下的dev-c++来做的,如果你用dev-c++,那么首先有1个问题要解决:http://blog.youkuaiyun.com/jimmy_w/archive/2007/12/24/1965313.aspx这里有解释为什么模板化基类里的名称不能被查到,以及怎么解决。编译好之后,在项目中可

Jimmy's Blog 1346

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

zthread学习 实例十三 线程间的协助(四)——读者、写者

对于读写问题,ZThread库专门封装了类(ReadWriteLock)来控制读写: FairReadWriteLock (按FIFO的顺序进行读写控制):   A FairReadWriteLock maintains a balance between the order read-only access and read-write access is allowed.

fengliping的专栏 571

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Qt中的线程与信号槽

mainwindow.h zthread.h main.cpp mainwindow.cpp zthread.cpp 界面:运行结果:】我好像明白了点,我确实语法错了。之前关联信号与槽的时候,明明是不同的两个类,我却在connect前边加上了一个类域,这是其一;信号函数没有函数体定义,不能在.cpp文件中实现,但是我却实现了,还加了类域没想到 重定义 三个字放到信号signals这里是这样的情况,我粗略地以为只是函数、变量对象等的“重定义、” connect(m_pThtread,&

优快云_YJX的博客 543

ZThread多线程库学习笔记整理三

对于该库的学习和文档资料的整理,我个人把握的主线是以程序实践作为基础,在程序实践的基础上对相关的实现代码进行学习,明确整个库的基本架构层次,学习库的架构设计和库中涉及到的设计思想,以此来提高自己程序结构设计的能力和在代码实现时的设计模式的运用技能。 为了方便对库进行跟踪与调试,我决定在自己部署的ZThread的解决方案中建立两个工程,一个是库生成的工程,一个是test工程,主要是为了测试ZThr

追寻自己 928

zthread学习 实例九 任务终止(二)——中断方式

终止一个阻塞线程和终止一个非阻塞线程的方式

Jarry's World 2527

ZThread库学习笔记(一) Time类的使用

Time类提供了访问相对于程序启动的时间值.换句话说, 这个类可以被想像成一个时钟从0开始向上记数. 这个类提供毫秒级分辨率.  Time类的构造函数有两个一个是默认构造函数,一个是拷贝构造函数。 默认构造函数使用当前时间(相对于程序启动时间)创建一个Time对象. 拷贝构造函数复制另一个Time对象。Time类包含两个成员函数unsigned long millise

张翼翔的专栏 1003
上一篇: zthread学习 实例四 让步、休眠、优先级
下一篇: zthread学习 实例六 访问控制
StudentFlp
博客等级 码龄16年 5粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值