博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows多线程同步机制---互斥量
阅读量:3984 次
发布时间:2019-05-24

本文共 1735 字,大约阅读时间需要 5 分钟。

1 互斥量

   
多个线程同时只能有一个执行.等候到互斥量的线程就拥有了互斥量,在线程释放该互斥量之前,别的等候该互斥量的线程都不会等候到
    

  2 互斥量使用

    2.1 创建互斥

      HANDLE CreateMutex(
        LPSECURITY_ATTRIBUTES lpMutexAttributes,
                       //安全属性
        BOOL bInitialOwner,  
                       //初始化的拥有线程

  LPCTSTR lpName ); //名称

bInitialOwner - TRUE表示当前创建互斥
量的线程拥有互斥, FALSE为不拥有.

    2.2 等候互斥

       WaitForSingleObject
       WaitForMultipleObjects

    2.3 重置互斥

       ReleaseMutex 

    2.4 关闭互斥

       CloseHandle

    2.5 等候互斥量的线程执行数序

使用互斥线程,按照谁先等候谁先拥有互斥量的规则顺序执行.(以后都按这个顺序执行)

    2.6 其他函数

      OpenMutex 打开已存在的有名互斥量,返回互斥量句柄

你想在一个进程中创建了一个有名字的互斥量,想在别的进程中使用这个互斥量的时候,就用此函数指定互斥量名字来得到互斥量的句柄

// Mutex.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "conio.h"#include "windows.h"HANDLE g_hMutex = NULL;DWORD WINAPI ThreadProc1( LPVOID pParam ){	while( 1 )	{   //等候互斥量		WaitForSingleObject( g_hMutex,			INFINITE );		printf( "ThreadProc1----------\n");		Sleep( 500 );		//释放互斥量		ReleaseMutex( g_hMutex );	}	return 0;}DWORD WINAPI ThreadProc2( LPVOID pParam ){	while( 1 )	{	//等候互斥量		WaitForSingleObject( g_hMutex, 			INFINITE );		printf( "------ThreadProc2------\n");		Sleep( 500 );		//释放互斥量		ReleaseMutex( g_hMutex );	}	return 0;}DWORD WINAPI ThreadProc3( LPVOID pParam ){	while( 1 )	{	//等候互斥量		WaitForSingleObject( g_hMutex, 			INFINITE );		printf( "------------ThreadProc3\n");		Sleep( 500 );		//释放互斥量		ReleaseMutex( g_hMutex );	}	return 0;}void Create( ){	DWORD  nThreadID  = 0;	HANDLE hThread[3] = { NULL };	hThread[0] = CreateThread( NULL, 0,		ThreadProc1, NULL, 0, &nThreadID );	hThread[1] = CreateThread( NULL, 0, 		ThreadProc2, NULL, 0, &nThreadID );	hThread[2] = CreateThread( NULL, 0, 		ThreadProc3, NULL, 0, &nThreadID );}int main(int argc, char* argv[]){	//创建互斥量	g_hMutex = CreateMutex( NULL,		FALSE, NULL );	Create( );	getch( );	//关闭	CloseHandle( g_hMutex );	return 0;}

转载地址:http://mwxui.baihongyu.com/

你可能感兴趣的文章
No.48-LeetCode42 - 一维蓄水
查看>>
No.50 - leetCode407- 二维蓄水-边界水面上升-很难
查看>>
No.51 - LeetCode931-路径动态规划-简单
查看>>
No.52 - LeetCode1130 - 区间dp - 数组最小乘积和
查看>>
No.53 - leetCode1143 - 最长公共子序列
查看>>
No.54-leetcode647-统计回文子串数量
查看>>
No.55 - leetcode983 - 买票-简单dp
查看>>
No.56 - leetcode413 - 等差子串个数
查看>>
网络:TCP三次握手四次挥手
查看>>
网络:TCP可靠性传输
查看>>
网络:syn flood攻击
查看>>
Thinking in java(六)
查看>>
Thinking in java(七)
查看>>
StringBuffer、StringBuilder与为什么说StringBuilder是不安全的
查看>>
《java 编程思想》 读书笔记 (一)
查看>>
eclipse注释乱码的一个小问题
查看>>
《java 编程思想》 读书笔记 (二)
查看>>
order by与索引
查看>>
Thinking in java(八)-正则表达式
查看>>
DB2 SQL7008问题
查看>>