windows系统调用 互斥体mutex
#include "iostream"
#include "windows.h"
using namespace std; class CCountUpDown{
public:
CCountUpDown(int nAccesses):
m_hThreadInc(INVALID_HANDLE_VALUE),
m_hThreadDec(INVALID_HANDLE_VALUE),
m_hMutexValue(INVALID_HANDLE_VALUE),
m_nValue(),
m_nAccess(nAccesses){
m_hMutexValue=CreateMutex(
NULL,
TRUE,
NULL
);
m_hThreadInc=CreateThread(
NULL,
,
IncThreadProc,
reinterpret_cast<LPVOID>(this),
,
NULL
);
m_hThreadDec=CreateThread(
NULL,
,
DecThreadProc,
reinterpret_cast<LPVOID>(this),
,
NULL
);
ReleaseMutex(m_hMutexValue);
} virtual ~CCountUpDown(){
CloseHandle(m_hThreadInc);
CloseHandle(m_hThreadDec);
CloseHandle(m_hMutexValue);
} virtual void WaitForCompletion(){
if(m_hThreadInc!=INVALID_HANDLE_VALUE&&m_hThreadDec!=INVALID_HANDLE_VALUE){
WaitForSingleObject(m_hThreadInc,INFINITE);
WaitForSingleObject(m_hThreadDec,INFINITE);
}
} protected:
virtual void DoCount(int nStep){
while(m_nAccess>){
WaitForSingleObject(m_hMutexValue,INFINITE); m_nValue+=nStep;
printf("thread:%d valuem,value:%d access:%d\n",GetCurrentThreadId(),m_nValue,m_nAccess);
--m_nAccess;
Sleep(); ReleaseMutex(m_hMutexValue);
}
} static DWORD WINAPI IncThreadProc(LPVOID lpParam){
CCountUpDown *pThis=reinterpret_cast<CCountUpDown*>(lpParam);
pThis->DoCount(+);
return ();
} static DWORD WINAPI DecThreadProc(LPVOID lpParam){
CCountUpDown*pThis=reinterpret_cast<CCountUpDown*>(lpParam);
pThis->DoCount(-);
return();
} protected:
HANDLE m_hThreadInc;
HANDLE m_hThreadDec;
HANDLE m_hMutexValue;
int m_nValue;
int m_nAccess;
}; void main(){
CCountUpDown ud();
ud.WaitForCompletion();
getchar();
}
windows系统调用 互斥体mutex的更多相关文章
- Linux系统中的信号量(semphore)与互斥体(mutex)
http://www.embexperts.com/viewthread.php?tid=31 两者最大区别:信号量可以允许多个线程进入临界区,而互斥体只允许一个线程进入临界区.本贴将描述信号量与互斥 ...
- C#互斥体——Mutex
Mutex对象是一个同步基元,可以用来做线程间的同步. 若多个线程需要共享一个资源,可以在这些线程中使用Mutex同步基元.当某一个线程占用Mutex对象时,其他也需要占用Mutex的线程将处于挂起状 ...
- Windbg调试互斥体(Mutex)死锁
一. 测试代码 #include <windows.h> #include <tchar.h> #include <process.h> HANDLE hMutex ...
- 41、Thead线程 System.Thread与互斥体Mutex
Thead线程 System.Thread 使用Thread类可以创建和控制线程.下面的代码是创建和启动一个新线程的简单例子.Thread 类的构造函数重载为接受ThreadStart和Paramet ...
- 基元线程同步构造之 Mutes(互斥体)
互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex)). 互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section). 因 ...
- 【APUE】信号量、互斥体和自旋锁
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html http://blog.chinaunix.net/uid-205 ...
- 互斥体与互锁 <第五篇>
互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex)).互斥体禁止多个线程同时进入受保护的代码“临界区”.因此,在任意时刻,只有一个线程被允许进入这 ...
- 转载 互斥体与互锁 <第五篇>
互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex)).互斥体禁止多个线程同时进入受保护的代码“临界区”.因此,在任意时刻,只有一个线程被允许进入这 ...
- windows多线程(六) 互斥量Mutex与关键段CriticalSection比较
一.关键段CS 和 互斥量Mutex 的相同点:都有线程拥有权 关键段和互斥量都有线程拥有权,即可以被一个线程拥有.在 前面讲关键段CS的文章中有说到,关键段结构体的第四个参数保存着拥有该关键段的线程 ...
随机推荐
- [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
一,问题分析 1.理论上 iPad 是按像素点排列的,可 iPad5为什么和 iPad3差别那么大??? 2.iPad3超出边界的视图,都有一个 leading 是superview 的 leadin ...
- iOS音频AAC视频H264编码 推流最佳方案
iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1 功能概况 * 实现音视频的数据的采集 * 实现音视频数据的编码,视频编码成 ...
- 【java】[转]标记接口和标记注解注解
Java中的标记接口和标记注解 http://blog.sina.com.cn/s/blog_7fdce91f0101d93m.html
- [LintCode] Simplify Path 简化路径
Given an absolute path for a file (Unix-style), simplify it. Have you met this question in a real in ...
- Qt Write and Read XML File 读写XML文件
在Qt中,我们有时候需要把一些参数写入xml文件,方便以后可以读入,类似一种存档读档的操作,例如,我们想生成如下的xml文件: <?xml version="1.0" enc ...
- Digital Imaging Processing 数字图像处理
8-Bit and 16-Bit Images 关于量化压缩与量化补偿 RGB Bayer Color分析 彩色CCD/CMOS的格式和计算机中的读取格式
- WinForm timer控件
timer 控件:按用户定义的时间间隔引发的事件 属性: Enabled 是否启用: Interval 事件发生的事件间隔,单位是毫秒 事件只有一个:Tick 事件经过指定的时间间隔 ...
- 集合 ArrayList 类
集合的基本信息: System.Collections 系统类中的收藏类,定义各种对象(如列表,队列,位数组,哈希表和字典)的集合 常用的集合为ArrayList类:特殊集合一般会用到Queue队 ...
- Hbuider 同步github
别人的教程,仅作收藏. http://blog.csdn.net/u011871921/article/details/44238971
- jq图片切换特效
首先引入js,内容如下: (function($){$.fn.slides=function(option){option=$.extend({},$.fn.slides.option,option) ...