青海网站建设价格/网页制作的软件

青海网站建设价格,网页制作的软件,个人网站成品,怎么查询别人的网站是独立ip还是共享ip什么是RAII机制RAII是Resource Acquisition Is Initialization(翻译成 “资源获取即初始化”)的简称,是C 语言的一种管理资源、避免资源泄漏的惯用法,该方法依赖构造函数资和析构函数的执行机制。RAII的做法是使用一个类对象&…

什么是RAII机制

RAII是Resource Acquisition Is Initialization(翻译成 “资源获取即初始化”)的简称,是C 语言的一种管理资源、避免资源泄漏的惯用法,该方法依赖构造函数资和析构函数的执行机制。

RAII的做法是使用一个类对象,在对象的构造函数中获取资源,在对象生命期内控制对资源的访问,最后在对象消失时,其析构函数来释放获取的资源;

这里的资源可以是文件句柄,内存,Event,互斥量等等,由于系统的资源是有限的,就好比自然界的石油,铁矿一样,不是取之不尽,用之不竭的。所以,我们在编程安全上,要求必须遵循以下几个步骤:

1. 申请资源

2. 使用资源

3. 释放资源

在步骤一和步骤二上,我们平时都比较容易把握,而资源的释放会因为种种编码原因容易被忽略,导致系统资源实际没有使用了,但却没有释放或者引发其他问题,影响了系统资源利用率。

没有使用RAII机制的弊端

那么我们为什么涉及资源管理时,建议使用RAII机制进行编码呢?

不推荐的编码方式片段:

while (TRUE) {     //等待直到获得指定对象的所有权     EnterCriticalSection(&g_csLock);      //关键代码段-begin     if (g_nIndex   < nMaxCnt)     {         cout << "Index = "<< g_nIndex << " ";         cout << "Thread2 is runing" << endl;         //权限释放,容易忘记         LeaveCriticalSection(&g_csLock);     }     else     {         //权限释放,容易忘记         LeaveCriticalSection(&g_csLock);         //关键代码段-end         break;     }  }

之所以不推荐这样的编码方式是因为EnterCriticalSection/LeaveCriticalSection必须配对使用,很需要依赖人,无法根本上解决问题,如果LeaveCriticalSection函数没有执行或者忘记添加该API很容易引发问题。

互斥锁应用RAII机制

为了从根本上解决问题,减少人为因素引发应用系统问题或者资源泄漏,在关键代码段和互斥量这两种锁上示范了如何应用RAII机制,简化多线程互斥编码。

关键代码段初始化和锁接口:

class CSLock{public:    CSLock()    {        //构造函数时初始化关键代码段对象,获取资源        InitializeCriticalSection(&m_csLock);    }~CSLock()    {        //析构函数时释放为关键代码段对象分配的所有资源,释放资源        DeleteCriticalSection(&m_csLock);    }  //生命周期内实现对象资源的管理(Lock/Unlock),使用资源    void Lock()    {        EnterCriticalSection(&m_csLock);    }void Unlock()    {        LeaveCriticalSection(&m_csLock);    }    //阻止锁的拷贝和赋值private:    CSLock (const CSLock& );    CSLock& operator  = (const CSLock&);private:    CRITICAL_SECTION m_csLock; };

创建互斥量对象和锁接口:

class CMutexLock{public:    CMutexLock()    {        m_hMutex = CreateMutex(NULL, FALSE, NULL);//获取资源    }~CMutexLock()    {        CloseHandle(m_hMutex);//释放资源    }void Lock()    {        WaitForSingleobject(m_hMutex, INFINITE);//使用资源    }void Unlock()    {        ReleaseMutex(m_hMutex);//使用资源    }    //阻止锁的拷贝和赋值private:    CMutexLock(const CMutexLock&);    CMutexLock& operator= (const CMutexLock&);private:    HANDLE  m_hMutex;};

类模板对象,再一次使用RAII机制管理锁对象的占用和释放,建议简化锁的应用,实现资源的自动回收

template<class T>class CLockGuard{public:    CLockGuard(T& locker) :m_lockerObj(locker)    {        m_lockerObj.Lock();    }~CLockGuard()    {        m_lockerObj.Unlock();    }private:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)

通达信《K线上画趋势线预警》精选指标K线上画趋势线预警源码&#xff1a;N:5;MA5:EMA(C,5)COLORWHITE;MA13:EMA(C,13)COLORCYAN;MA21:EMA(C,21)COLORMAGENTA;MA34:EMA(C,34)COLORYELLOW;MA55:EMA(C,55)COLORRED;{画线}A1:REF(H,N)HHV(H,2*N1);B1:FILTER(A1,N);C1:BACKSET(B1,N1…

linux module原理,NodeJS的模块原理

最近一直在使用Node JS&#xff0c;在网上看到了一段代码我觉得完美的诠释了Node JS模块加载的原理&#xff0c;其实深究下去&#xff0c;它还诠释了许多东西&#xff1a;Js模块化编程、闭包的真正强大之处等等。闲话不说&#xff0c;先看看这段代码&#xff1a;// - hello.jsv…

C 20 协程初探

【导读】&#xff1a;C 20 终于引入了协程特性&#xff0c;给库作者提供了一个实现协程的机制&#xff0c;让用户方便使用协程来编写异步逻辑&#xff0c;降低了异步并发编程的难度。结合我最近协程的学习&#xff0c;在这里记录一下相关内容。以下是正文使用场景协程和普通函数…

如何写一个简单的node.js C 扩展

node 是由 c 编写的&#xff0c;核心的 node 模块也都是由 c 代码来实现&#xff0c;所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口。如果大家对于 require 函数的描述还有印象的话&#xff0c;就会记得如果不写文件后缀&#xff0c;它是有一个特定的匹配规则…

在线画 有穷状态自动机 的软件_怎么画思维导图?不用下载软件,在线就能操作...

怎么画思维导图&#xff1f;在工作中&#xff0c;除了流程图&#xff0c;脑图也是很重要的一个存在&#xff1a;流程图帮助我们快速完成任务&#xff0c;而脑图告诉我们任务本质。画思维导图是一个积累的过程&#xff0c;急不来&#xff0c;对于新手来说还是有一定难度的。由于…

Spring Boot Actuator:在其顶部具有MVC层的自定义端点

Spring Boot Actuator端点允许您监视应用程序并与之交互。 Spring Boot包含许多内置端点&#xff0c;您也可以添加自己的端点。 添加自定义端点就像创建一个从org.springframework.boot.actuate.endpoint.AbstractEndpoint扩展的类一样容易。 但是Spring Boot Actuator也提供了…

422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别

SPI、I2C、串口、我相信如果你是从事的是嵌入式开发&#xff0c;一定会用到这三种通信协议&#xff0c;串口的话因为和波特率有关&#xff0c;所以一般的CPU或者MCU只会配有两个或者三个串口&#xff0c;而数据的传输&#xff0c;的话SPI和I2C用得会比较多区别&#xff1a;1、U…

C 的 6 种内存顺序,你都知道吗?

原子操作的内存顺序有六个内存顺序选项可应用于对原子类型的操作&#xff1a;1. memory_order_relaxed2. memory_order_consume3. memory_order_acquire4. memory_order_release5. memory_order_acq_rel6. memory_order_seq_cst。除非你为特定的操作指定一个顺序选项&#xff0…

易语言 网页用什么编码_通常提到的编码器是干什么用的

编码器&#xff08;encoder&#xff09;是将信号&#xff08;如比特流&#xff09;或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号&#xff0c;前者成为码盘&#xff0c;后者称码尺&#xff0e;按照读出方式编码器可以分…

如何优雅地实现 C 编译期静态反射

部门请来了软件专家袁英杰咨询师指导我们软件开发&#xff0c;从中我也学到了很多姿势&#xff0c;在此记录下来宝贵的经验。苹果的 mbp 品控真是差劲&#xff0c;写这个东西把 LShift 键 按坏了&#xff0c;真是难受。反射能做什么最近和大师聊软件设计&#xff0c;其中一个点…

香草 jboss 工具_如何为JBoss Developer Studio 8设置BPM和规则工具

香草 jboss 工具最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进…

局域网steam联机_适合和基友联机一起玩的单机游戏(1)

GTA5还有什么比在GTA中&#xff0c;和几个好基友一起&#xff0c;组建帮派&#xff0c;联机打砸抢&#xff0c;组队完成任务&#xff0c;和其他帮派火并更有意思的呢&#xff1f;游戏丰富的内容&#xff0c;各式各样的玩法&#xff0c;广袤的可探索空间&#xff0c;不愧是史上最…

C/C assert()函数用法总结与注意事项

1. 简介assert宏的原型定义在中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行。原型定义&#xff1a;#include void assert( int expression );assert的作用是先计算表达式 expression &#xff0c;如果其值为假&#xff08;即为0&#xff09;&#xff…

ppt flash倒计时器_PPT三大神器之iSlide插件

本文约1200字&#xff0c;阅读预计需要4分钟。为了提升PPT制作效率&#xff0c;我们有必要使用一些插件来提升工作效率&#xff0c;而PPT有三大插件神器&#xff0c;分别是iSlide、PA口袋动画&#xff0c;Onekey Tool&#xff08;俗称OK插件&#xff09;&#xff0c;今天我们就…

C 语言中std::array的神奇用法总结

std::array是在C 11标准中增加的STL容器&#xff0c;它的设计目的是提供与原生数组类似的功能与性能。也正因此&#xff0c;使得std::array有很多与其他容器不同的特殊之处&#xff0c;比如&#xff1a;std::array的元素是直接存放在实例内部&#xff0c;而不是在堆上分配空间&…

java线程池并发_线程池之外:Java并发并不像您想象的那样糟糕

java线程池并发Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff…

网络营销理论模型_网络营销:课堂笔记(第四章下)

网络营销产品策略(续上篇)本章知识清单三、网络品牌如何打造&#xff1f;什么是品牌目前为止&#xff0c;对品牌的含义一直没有一个统一的、权威的解释。如果从品牌的构成要素和基本功能方面来界定品牌的话&#xff0c;最具有代表性和最经典的表述当属美国市场营销协会的定义。…

ios多线程Android,iOS 关于多线程

一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的&#xff0c;每个进程均运行在其专用且受保护的内存空间内比如&#xff1a;同时打开QQ&#xff0c;Xcode&#xff0c;系统就会分别启动2个进程通过”活动监视器”可以查看Mac系统中所开启…

websockets_使用用户名/密码和Servlet安全性保护WebSockets

websocketsRFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们来谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&…

android横向排列 间隙,Android开发消除横向排列的多个Button之间的空隙

一.问题重述摘要里描述的可能不太清楚&#xff0c;问题如下图&#xff1a;如何消除Button1和Button2之间的空隙&#xff0c;以及Button与左右边界之间的空隙&#xff1f;二.问题根源这里出现的空隙其实是Button的背景图片中的透明部分&#xff0c;如下图&#xff1a;(两个按钮被…