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-blogasce1885的博客
ASCE Research Library是一个一站式检索和浏览土木工程领域核心资源的平台,可以通过AIP的scitation平台检索ASCE的所有资源,访问全文需进入ASCE Research Library(www.ascelibrary.org)。用户可以通过CrossRef ...
PHASE II OF THE ASCE BENCHMARK STUDY ON SHM
此为ASCE的第三代基准模型代码,可供土木工程领域学者使用。
### ASCE7-10《建筑物和其他结构最小设计荷载》关键知识点解析 #### 一、规范内容简介 美国土木工程师学会(American Society of Civil Engineers, ASCE)发布的ASCE7-10标准《建筑物和其他结构最小设计荷载》,...
ASCE(美国土木工程师学会)和Science Direct是两个知名的学术出版机构,它们都有自己特定的文献引用和输出格式。EndNote是一款流行的文献管理软件,可以帮助研究人员方便地管理和格式化参考文献。 ASCE(American ...
ASCE LaTeX 指南主要介绍了土木工程学会(American Society of Civil Engineers,简称ASCE)期刊的LaTeX投稿流程和注意事项。由于ASCE期刊接受LaTeX格式的投稿,因此作者需要按照特定的模板和格式要求提交论文。本文...
ASCE(American Society of Civil Engineers,美国土木工程师学会)是一个知名的国际专业组织,而"asce.zip_ASCE_list"可能是指一个与ASCE相关的软件开发项目,具体来说,它是一个MFC(Microsoft Foundation Classes...
ASCE Research Library作为综合平台,拥有超过73,000篇全文文献和630,000页的资料,每年新增约4,000篇文献,是全球最大的土木工程全文文献资料库。 在功能上,ASCE Research Library提供了多种检索方式,用户可以按...
ASCE 7-10美国建筑荷载规范(中文版) ASCE 7-10《建筑物和其他结构最小设计荷载》(Minimum Design Loads for Buildings and Other Structures)是由美国土木工程学会(ASCE)发布的一份重要的建筑荷载规范。该...
ASCE-7-2005美国荷载规范中文版知识点总结 ASCE-7-2005美国荷载规范中文版是美国 土木工程师协会(ASCE)发布的一份最小设计荷载规范。该规范涵盖了建筑和其他结构的设计荷载要求,旨在确保建筑和结构的安全和可靠...
根据给定文件信息,本篇文档是关于Android研发工程师高级进阶技能的介绍,涉及了函数响应式编程、Android Support Annotations、RxJava、Android应用性能优化、Fragment使用、依赖注入、ASCE1885动态启发技术等技术...
eclipse 配置AmaterasUML时需要的3个jar 包,以及配置文档 http://blog.csdn.net/asce1885/article/details/40744163
ANSI ASCE CI 71-21 Identifying, Quantifying, and Proving Loss of Productivity.pdf
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可能包含了数据存储的解决方案,如SQLite数据库操作或SharedPreferences的封装。这使得开发者能够方便地进行数据的读写操作,同时保持代码的整洁和可维护性。 4. **视图绑定与UI组件**: 库可能提供了...
应用该方法对由国际结构控制协会与美国土木工程学会(IASC-ASCE)提出的健康监测Benchmark结构进行了分析。结果表明,两阶段损伤诊断方法能够;隹确地定出可能损伤单元的位置与损伤程度,识别结果与真实的损伤接近,...