#ifndef _PTHREAD_WRAP_H
#define _PTHREAD_WRAP_H
#include <pthread.h>

class hm_pthread_mutex
{
public:
hm_pthread_mutex()
{
pthread_mutex_init(&m_mutex, 0);
}
~hm_pthread_mutex()
{
pthread_mutex_destroy(&m_mutex);
}

inline void lock()
{
pthread_mutex_lock(&m_mutex);
}
inline void unlock()
{
pthread_mutex_unlock(&m_mutex);
}

private:
pthread_mutex_t m_mutex;
};

class hm_pthread_rwlock
{
public:
hm_pthread_rwlock()
{
pthread_rwlock_init(&m_rwlock, 0);
}
~hm_pthread_rwlock()
{
pthread_rwlock_destroy(&m_rwlock);
}

inline void rdlock()
{
pthread_rwlock_rdlock(&m_rwlock);
}
inline void wrlock()
{
pthread_rwlock_wrlock(&m_rwlock);
}
inline void unlock()
{
pthread_rwlock_unlock(&m_rwlock);
}

private:
pthread_rwlock_t m_rwlock;
};

class hm_pthread_cond
{
public:
hm_pthread_cond()
{
m_complete = false;
pthread_mutex_init(&m_mutex, 0);
pthread_cond_init(&m_cond, 0);
}

~hm_pthread_cond()
{
pthread_mutex_destroy(&m_mutex);
pthread_cond_destroy(&m_cond);
}

inline void wait()
{
pthread_mutex_lock(&m_mutex);

m_complete = false;
while (!m_complete)
pthread_cond_wait(&m_cond, &m_mutex);

pthread_mutex_unlock(&m_mutex);
}

inline void notify(bool complete=true)
{
pthread_mutex_lock(&m_mutex);

m_complete = complete;
pthread_cond_signal(&m_cond);

pthread_mutex_unlock(&m_mutex);
}

private:
bool m_complete;
pthread_mutex_t m_mutex;
pthread_cond_t m_cond;
};

#endif//_PTHREAD_WRAP_H

pthread_wrap.h的更多相关文章

  1. APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试

    此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...

  2. 关于apue.3e中apue.h的使用

    关于apue.3e中apue.h的使用 近来要学一遍APUE第三版,并于此开博做为记录. 先下载源文件: # url: http://http//www.apuebook.com/code3e.htm ...

  3. YYModel 源码解读(二)之NSObject+YYModel.h (1)

    本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...

  4. YYModel 源码解读(一)之YYModel.h

    #if __has_include(<YYModel/YYModel.h>) FOUNDATION_EXPORT double YYModelVersionNumber; FOUNDATI ...

  5. error RC1015: cannot open include file 'afxres.h' 解决办法

    在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...

  6. afxcomctl32.h与afxcomctl32.inl报错

    afxcomctl32.h与afxcomctl32.inl报错 编译公司一个几年前的老项目,是从VC6.0升级到VS2005的. 1.编译时报缺少头文件,于是附件包含目录,于是出现了以下报错: 1&g ...

  7. C标准头文件<math.h>

    定义域错误可以理解为超出了函数的适用范围,如果发生了定义域错误,设errno为EDOM 如果结果不能表示为double值,则发生值域错误,如果结果上溢,则函数返回HUGE_VAL的值,设errno为E ...

  8. C标准头文件<ctype.h>

    主要包括了一些字符识别和转换函数 字符判断 isalnum() //函数原型 #include<ctype.h> int isalum(int c); 功能:如果输入的字符是字母(alph ...

  9. xcode中的.h和.m文件分别是什么意思?各有什么用?

    .h 表示头文件,用来声明各种成员变量,方法,属性之类的.在import的时候用头文件. .m 主要用来实现.h 里声明的方法.举个例子,如果要写一个方法,你要在.h里先声明: - (void)myM ...

随机推荐

  1. poj2636---Electrical Outlets(插线板)

    #include <stdio.h> #include <stdlib.h> int main() { int n,nc,i; scanf("%d",&am ...

  2. Jimmy Choo_百度百科

    Jimmy Choo_百度百科 Jimmy Choo

  3. collection系列用法-defaultdict()

    defaultdict() 定义以及作用 返回一个和dictionary类似的对象,和dict不同主要体现在2个方面: 可以指定key对应的value的类型. 不必为默认值担心,换句话说就是不必担心有 ...

  4. How to Type(dp)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. FilenameUtils工具类

    转载请出自出处:http://eksliang.iteye.com/blog/2217081 一.概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的 ...

  6. Javascript 基础编程练习一

    Javascript 基础互动编程,这篇练习结合了function 函数名(), onclick 时间, prompt输入窗口, window.open和confirm窗口, 任务 1.新窗口打开时弹 ...

  7. WebService:The remote server returned an error: (400) Bad Request

    开发工具:VS2010.开发组件:WebService.运行环境:Windows 今天一个同事在进行计费接口联调试时,发现了一个非常奇怪的问题:接口在家里环境测试,一切正常,但是部署到现网环境之后,连 ...

  8. Linux前台的程序转到后台执行(关闭终端而不杀死命令)

    你是否经常遇到这样的情况,通过SSH或者终端putty连接到一台linux/unix机器,执行一个程序.一个脚本或者一条命令,但现在你需要关闭SSH或者终端,由于该该程序.脚本或者命令正在运行,一旦你 ...

  9. Deep Learning(深度学习)学习笔记整理系列之(一)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-0 ...

  10. 软件开发常用Linux命令

    解压缩 tar -zxvf xxx.tar.gz 文件显示及查找常用于分析log //显示file中包含aaa的行 cat <file>|grep aaa 查看cpu memory基本信息 ...