`

《ASCE1885的源码分析》の跨平台互斥对象Mutex封装类

 
阅读更多

1)首先定义互斥对象的接口IMutex(所在文件是IMutex.h

class IMutex //抽象接口

{

public:

virtual ~IMutex() {}

virtual void Lock() const = 0;

virtual void Unlock() const = 0;

};

2)接着是实现IMutex接口的实现类Mutex

头文件是Mutex.h

#ifndef _WIN32

#include <pthread.h>

#else

#include <windows.h>

#endif

#include "IMutex.h"

class Mutex : public IMutex

{

public:

Mutex();

~Mutex();

virtual void Lock() const;

virtual void Unlock() const;

private:

#ifdef _WIN32

HANDLE m_mutex; //互斥对象的句柄

#else

mutable pthread_mutex_t m_mutex;

#endif

};

实现文件Mutex.cpp

#include "Mutex.h"

Mutex::Mutex()

{

#ifdef _WIN32

m_mutex = ::CreateMutex(NULL, FALSE, NULL); //调用Win32 API创建互斥对象

#else

pthread_mutex_init(&m_mutex, NULL);

#endif

}

Mutex::~Mutex()

{

#ifdef _WIN32

::CloseHandle(m_mutex); //在析构函数中关闭句柄

#else

pthread_mutex_destroy(&m_mutex);

#endif

}

void Mutex::Lock() const

{

#ifdef _WIN32

DWORD d = WaitForSingleObject(m_mutex, INFINITE); //调用等待函数来获取互斥对象

//(只有在拥有该互斥的线程调用ReleaseMutex释放掉该互斥对象,

//等待函数才返回,即本线程才获得互斥对象)

/// /todo check 'd' for result

#else

pthread_mutex_lock(&m_mutex);

#endif

}

void Mutex::Unlock() const

{

#ifdef _WIN32

::ReleaseMutex(m_mutex); //释放互斥对象,以便其他线程获取

#else

pthread_mutex_unlock(&m_mutex);

#endif

}

3)最后我们不直接调用Mutex类,而是对它再进行一次封装,即增加类Lock来使用Mutex

头文件Lock.h

class IMutex;

class Lock

{

public:

Lock(const IMutex&);

~Lock();

private:

const IMutex& m_mutex;

};

实现文件Lock.cpp

#include "IMutex.h"

#include "Lock.h"

Lock::Lock(const IMutex& m) : m_mutex(m)

{

m_mutex.Lock();

}

Lock::~Lock()

{

m_mutex.Unlock();

}

分享到:
评论

相关推荐

    asce1885-blog:asce1885的博客

    asce1885-blogasce1885的博客

    《ASCE使用指南》

    ASCE Research Library是一个一站式检索和浏览土木工程领域核心资源的平台,可以通过AIP的scitation平台检索ASCE的所有资源,访问全文需进入ASCE Research Library(www.ascelibrary.org)。用户可以通过CrossRef ...

    PHASE II OF THE ASCE BENCHMARK STUDY ON SHM.rar_BENCHMARK ASCE_a

    PHASE II OF THE ASCE BENCHMARK STUDY ON SHM

    原版第三代benchmark代码.rar_ASCE-Benchmark_BENCHMARK ASCE_benchmark_dri

    此为ASCE的第三代基准模型代码,可供土木工程领域学者使用。

    ASCE7-10-建筑物和其他结构最小设计荷载-中文版.pdf

    ### ASCE7-10《建筑物和其他结构最小设计荷载》关键知识点解析 #### 一、规范内容简介 美国土木工程师学会(American Society of Civil Engineers, ASCE)发布的ASCE7-10标准《建筑物和其他结构最小设计荷载》,...

    土木工程几个著名期刊ASCE和Science direct中输出格式

    ASCE(美国土木工程师学会)和Science Direct是两个知名的学术出版机构,它们都有自己特定的文献引用和输出格式。EndNote是一款流行的文献管理软件,可以帮助研究人员方便地管理和格式化参考文献。 ASCE(American ...

    ASCE Latex Guide

    ASCE LaTeX 指南主要介绍了土木工程学会(American Society of Civil Engineers,简称ASCE)期刊的LaTeX投稿流程和注意事项。由于ASCE期刊接受LaTeX格式的投稿,因此作者需要按照特定的模板和格式要求提交论文。本文...

    asce.zip_ASCE_list

    ASCE(American Society of Civil Engineers,美国土木工程师学会)是一个知名的国际专业组织,而"asce.zip_ASCE_list"可能是指一个与ASCE相关的软件开发项目,具体来说,它是一个MFC(Microsoft Foundation Classes...

    ASCE全文数据库培训iGroup公司.ppt

    ASCE Research Library作为综合平台,拥有超过73,000篇全文文献和630,000页的资料,每年新增约4,000篇文献,是全球最大的土木工程全文文献资料库。 在功能上,ASCE Research Library提供了多种检索方式,用户可以按...

    ASCE_7-10美国建筑荷载规范(中文版);.pdf

    ASCE 7-10美国建筑荷载规范(中文版) ASCE 7-10《建筑物和其他结构最小设计荷载》(Minimum Design Loads for Buildings and Other Structures)是由美国土木工程学会(ASCE)发布的一份重要的建筑荷载规范。该...

    ASCE-7-2005-美国荷载规范-(中文版)

    ASCE-7-2005美国荷载规范中文版知识点总结 ASCE-7-2005美国荷载规范中文版是美国 土木工程师协会(ASCE)发布的一份最小设计荷载规范。该规范涵盖了建筑和其他结构的设计荷载要求,旨在确保建筑和结构的安全和可靠...

    Android研发工程师高级进阶

    根据给定文件信息,本篇文档是关于Android研发工程师高级进阶技能的介绍,涉及了函数响应式编程、Android Support Annotations、RxJava、Android应用性能优化、Fragment使用、依赖注入、ASCE1885动态启发技术等技术...

    AmaterasUML的配置及使用 .tar

    eclipse 配置AmaterasUML时需要的3个jar 包,以及配置文档 http://blog.csdn.net/asce1885/article/details/40744163

    ANSI ASCE CI 71-21 Identifying, Quantifying, and Proving Loss of

    ANSI ASCE CI 71-21 Identifying, Quantifying, and Proving Loss of Productivity.pdf

    03NPE-ASCE00-EM4

    957/5000 结构安全和结构动力学有许多领域,通常需要计算随机变量函数的前几个统计矩。 通常的近似是泰勒展开法。 这种方法需要计算导数。 为了避免导数的计算,已经提出了概率矩的点估计。 然而,准确度非常低,...

    美国建筑荷载规范

    (ASCE 7-10 “Minimum Design Loads for Buildings and Other Structures”)主要内容翻译与介绍 目录 0 规范内容简介1 1 总则7 1.1 适用范围7 1.2 定义和解释7 1.3 基本要求7 1.3.1 强度和刚度7 1.3.2 适用性8 ...

    asce-common:可以重用并轻松集成到任何项目中的android通用代码

    ASCE-Common可能包含了数据存储的解决方案,如SQLite数据库操作或SharedPreferences的封装。这使得开发者能够方便地进行数据的读写操作,同时保持代码的整洁和可维护性。 4. **视图绑定与UI组件**: 库可能提供了...

    基于特征灵敏度的Benchmark结构损伤诊断 (2005年)

    应用该方法对由国际结构控制协会与美国土木工程学会(IASC-ASCE)提出的健康监测Benchmark结构进行了分析。结果表明,两阶段损伤诊断方法能够;隹确地定出可能损伤单元的位置与损伤程度,识别结果与真实的损伤接近,...

Global site tag (gtag.js) - Google Analytics