windows下互斥量的使用
来源:互联网 发布:sql查询语句实例 编辑:程序博客网 时间:2024/05/18 21:49
互斥量:
适用范围:可以跨进程同步,还可以用来保证程序只有一个实例运行(创建命名互斥量),也可以用来做线程间的同步
相关结构:HANDLE hMutex;
相关方法:
/*
创建互斥量,初始化的工作
参数一为安全选项,一般为空
参数二表示当前互斥量是否属于某个线程,一般为空
参数三互斥量的名称,如果需要跨进程同步或者需要保证程序只有一个实例运行,则需要设置,其他情况一般为空。
*/
CreateMutex(NULL,FALSE,NULL)
WaitForSingleObject(hMutex,INIFINET);//同事件对象
/*
释放互斥量,以使得其他线程可以访问。
*/
ReleaseMutex(hMutex)
/*
在互斥对象通知引 起调用等待函数返回时,等待函数的返回值不再是通常的WAIT_OBJECT_0(对于WaitForSingleObject()函数)或是在 WAIT_OBJECT_0到WAIT_OBJECT_0+nCount-1之间的一个值(对于WaitForMultipleObjects()函 数),而是将返回一个WAIT_ABANDONED_0(对于WaitForSingleObject()函数)或是在WAIT_ABANDONED_0 到WAIT_ABANDONED_0+nCount-1之间的一个值(对于WaitForMultipleObjects()函数)。
*/
WaitForMultiObjects(DWORD nCount, // 等待句柄数
CONST HANDLE *lpHandles, // 句柄数组首地址
BOOL fWaitAll, // 等待标志 DWORD dwMilliseconds // 等待时间间隔)
/*
打开一个已经创建好了的命名互斥量,用于跨进程同步
*/
HANDLE OpenMutex(
DWORD dwDesiredAccess, // 访问标志
BOOL bInheritHandle, // 继承标志
LPCTSTR lpName // 互斥对象名
);
DWORD dwDesiredAccess, // 访问标志
BOOL bInheritHandle, // 继承标志
LPCTSTR lpName // 互斥对象名
);
测试代码:
#include <stdio.h>
#include <Windows.h>
#include <Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
int thread_count = 0;
HANDLE hMutex;
DWORD CALLBACK thread_proc(LPVOID params)
{
int i = 0;
char c = 'A';
for(i = 0; i < 10; ++i)
{
WaitForSingleObject(hMutex,INFINITE);
for(c = 'A'; c <= 'Z'; ++c)
{
printf("%c",c);
Sleep(1);
}
printf("\n");
ReleaseMutex(hMutex);
}
thread_count--;
return 0;
}
int main()
{
hMutex = CreateMutex(NULL,FALSE,NULL);
thread_count = 4;
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
while (thread_count)
Sleep(0);
getchar();
return 0;
}
#include <Windows.h>
#include <Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
int thread_count = 0;
HANDLE hMutex;
DWORD CALLBACK thread_proc(LPVOID params)
{
int i = 0;
char c = 'A';
for(i = 0; i < 10; ++i)
{
WaitForSingleObject(hMutex,INFINITE);
for(c = 'A'; c <= 'Z'; ++c)
{
printf("%c",c);
Sleep(1);
}
printf("\n");
ReleaseMutex(hMutex);
}
thread_count--;
return 0;
}
int main()
{
hMutex = CreateMutex(NULL,FALSE,NULL);
thread_count = 4;
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
CreateThread(0, 0, thread_proc, 0, 0, 0);
while (thread_count)
Sleep(0);
getchar();
return 0;
}
0 0
- windows下互斥量的使用
- 使用Windows的快捷键
- windows防火墙的使用
- Windows定时器的使用
- Windows进程的使用
- Windows命令行的使用
- windows信号量的使用
- Windows SetTimer的使用
- Windows命令行的使用
- windows命令行的使用
- Windows钩子的使用
- Windows CMD 的使用
- Windows 钩子的使用
- redis Windows的使用
- windows命令的使用
- Windows的消息使用理解
- 使用Windows NT 的安全性
- Windows中HOOK的使用
- STM32F429 Discovery 开发板USART乱码问题,解决过程
- Linux 下stat和access函数
- 与大家讨论如何用opencore amr在iOS上decode(已解决)
- 阿里巴巴面经
- 快速幂
- windows下互斥量的使用
- 【iOS开发之Objective-C】单例的创建
- SQL相关问题的解决_20150730
- Linux Centos 配置防火墙
- 静态代理模式
- hdoj 1896 Stones (优先队列)
- Ubuntu 1204 升级到 1404
- android的测试方法,
- 【剑指offer】1.赋值运算符函数