基于visual c++之windows核心编程代码分析(15)使用Mutex同步线程
来源:互联网 发布:淘宝一元秒杀专区 编辑:程序博客网 时间:2024/05/11 16:55
我们编写多线程应用程序的时候,经常需要进行线程同步协作,我们来实践一下用Mutex同步线程。请见代码实现与注释分析。
/* 头文件 */#include <windows.h>#include <stdio.h>/* 常量定义 */#define NUM_THREADS4 /* 全局变量 */DWORD dwCounter = 0;HANDLE hMutex; /* 函数声明 */void UseMutex(void);DWORD WINAPI MutexThread(LPVOID lpParam);/************************************** int main(void)* 功能演示** 参数未使用**************************************/int main(){UseMutex();}/************************************** void UseMutex(void)* 功能演示 Mutex 的使用方法** 参数未使用**************************************/void UseMutex(void) {INT i;HANDLE hThread;#ifdef MUTEX// 创建 MutexhMutex = CreateMutex( NULL, // 默认安全属性FALSE, // 初始化为未被拥有NULL); // 未命名if (hMutex == NULL) {printf("CreateMutex error: %d\n", GetLastError());}#endif// 创建多个线程for(i = 0; i < NUM_THREADS; i++) {hThread = CreateThread(NULL, 0, MutexThread, NULL, 0, NULL); if (hThread == NULL) {printf("CreateThread failed (%d)\n", GetLastError());return;}}Sleep(1000);}/************************************** DWORD WINAPI MutexThread(LPVOID lpParam) * 功能线程函数,读共享内存** 参数未使用**************************************/DWORD WINAPI MutexThread(LPVOID lpParam) {#ifdef MUTEX DWORD dwWaitResult;dwWaitResult = WaitForSingleObject( hMutex,// 句柄INFINITE);// 无限等待switch (dwWaitResult) {case WAIT_OBJECT_0: #endif// 等待随机长的时间,各个线程等待的时间将不一致Sleep(rand()%100);// 得到互斥对象后 访问共享数据printf("counter: %d\n",dwCounter);// 互斥对象保证同一时间只有一个线程在访问dwCounterdwCounter++;#ifdef MUTEX// 释放 Mutexif(!ReleaseMutex(hMutex)){printf("Release Mutex error: %d\n", GetLastError()); }break; default: printf("Wait error: %d\n", GetLastError()); ExitThread(0); }#endifreturn 1;}
- 基于visual c++之windows核心编程代码分析(15)使用Mutex同步线程
- 基于visual c++之windows核心编程代码分析(15)使用Mutex同步线程
- 基于visual c++之windows核心编程代码分析(12)使用信号量同步线程
- 基于visual c++之windows核心编程代码分析(14)使用Event同步线程
- 基于visual c++之windows核心编程代码分析(12)使用信号量同步线程
- 基于visual c++之windows核心编程代码分析(14)使用Event同步线程
- 基于visual c++之windows核心编程代码分析(56)使用winsock搜索蓝牙设备
- 基于visual c++之windows核心编程代码分析(56)使用winsock搜索蓝牙设备
- 基于visual c++之windows核心编程代码分析(56)使用winsock搜索蓝牙设备
- 基于visual c++之windows核心编程代码分析(56)使用winsock搜索蓝牙设备
- 基于visual c++之windows核心编程代码分析(20) 纤程与线程的互相转换
- 基于visual c++之windows核心编程代码分析(20) 纤程与线程的互相转换
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于visual c++之windows核心编程代码分析(61)打造自己的Windows输入法
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于visual c++之windows核心编程代码分析(18)远程代码注入执行
- 基于visual c++之windows核心编程代码分析(18)远程代码注入执行
- jatoolsPrinter打印web页面
- 基于visual c++之windows核心编程代码分析(14)使用Event同步线程
- css3实现浏览器缩放
- WindowsPhone7不支持后台的API
- Linux系统环境下的Socket编程详细解析
- 基于visual c++之windows核心编程代码分析(15)使用Mutex同步线程
- 我的csdn的第二课————恩,不错哦!
- listener.ora,sqlnet.ora,tnsnames.ora的关系以及手工配置举例
- 惠普HP CQ40 重装XP SP3系统后重启无声
- 2011年个人总结
- 调整过的6*12 ANSI字体
- 基于visual c++之windows核心编程代码分析(16)使用邮槽进行进程通信
- 常见tcp/ip协议结构定义
- 两个很常用的类CArray,CList