windows下互斥量的使用

互斥量:
适用范围:可以跨进程同步,还可以用来保证程序只有一个实例运行(创建命名互斥量),也可以用来做线程间的同步
相关结构: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 // 互斥对象名
);

测试代码:
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值