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的博客
ASCE7-10-建筑物和其他结构最小设计荷载-中文版.pdf
PHASE II OF THE ASCE BENCHMARK STUDY ON SHM
此为ASCE的第三代基准模型代码,可供土木工程领域学者使用。
ASCE是土木工程学会的重要期刊。国外期刊投稿主要是latex,该期刊有Latex的投稿模板。
土木工程几个著名期刊ASCE和Science direct中输出格式
希望大家能用得着这个东西!检索时很有用啊
mfc工程,一个可以编辑,选择能实现众多功能的list控件示范工程,
ASCE全文数据库培训iGroup公司.ppt
ASCE-7-2005-美国荷载规范-(中文版)
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
ASCE_7-10美国建筑荷载规范(中文版);.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 ...
针对美国IASC-ASCE的结构健康监测科研组提出的基准结构进行结构自振频率识别研究.神经网络训练时使用的数据为有限元程序计算所得出,将有损伤结构在环境激励下某点的加速度响应,通过快速傅立叶变换得到的离散频率响应...
应用该方法对由国际结构控制协会与美国土木工程学会(IASC-ASCE)提出的健康监测Benchmark结构进行了分析。结果表明,两阶段损伤诊断方法能够;隹确地定出可能损伤单元的位置与损伤程度,识别结果与真实的损伤接近,...
集成的建模模板,基于代码的负载分配,高级分析选项,设计优化过程以及可定制的输出报告,均跨一个强大的平台进行协调,从而使SAP2000特别适用于专业人员。 SAP2000 v25新功能 1、用户界面 添加了树结构模型资源...
考虑3种对称损伤模式和1种非对称损伤模式,对由国际结构控制协会与美国土木工程学会(IASC-ASCE)提出的健康监测Benchmark模型结构第二阶段有斜撑的情况进行模拟分析。结果表明:该方法能够有效地识别出结构损伤单元...
asce-common 可以重用并轻松集成到任何项目中的android通用代码