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;
}