● CreateMutex
函数原型
1 HANDLE WINAPI CreateMutex( 2 _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, 3 _In_ BOOL bInitialOwner, 4 _In_opt_ LPCTSTR lpName 5 );
○ 参数1:lpMutexAttributes [in, optional]
指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则处理不能由子进程继承。
○ 参数2:bInitialOwner [in]
如果此值为真,且调用者创建互斥对象,则调用线程获得互斥对象的初始所有权。否则,调用线程不获取互斥对象的所有权。要确定调用者是否创建互斥对象,请参见返回值部分。
○ 参数3:lpName [in, optional]
互斥对象的名称。名称仅限于MAX_PATH字符。名称比较是区分大小写的。
○ Return value返回值
如果函数成功,返回值就是新创建的互斥对象的句柄。
如果函数失败,返回值为NULL。要得到扩展的错误信息,请调用GetLastError。
● ReleaseMutex
函数原型
1 BOOL WINAPI ReleaseMutex( 2 _In_ HANDLE hMutex 3 );
○ 参数1:hMutex [in]
一个对互斥对象的句柄。CreateMutex或OpenMutex函数返回这个句柄。
○ Return value返回值
如果函数成功,返回值为非零。
如果函数失败,返回值为零。要得到扩展的错误信息,请调用GetLastError。
1 #define UNICODE 2 #include <stdio.h> 3 #include <process.h> 4 #include <windows.h> 5 //互斥体 关键段 -> 线程同步 6 //每个互斥体保存了一个线程ID -> 7 //线程 ID -> 非0(无信号) 0(有信号) 8 int main() 9 { 10 HANDLE hMuex = CreateMutex( nullptr, TRUE, nullptr); 11 //无论Wait都是有信号 //如果像要别的线程使用到就需要释放 ReleaseMutes(hMuex); 12 WaitForSingleObjct(hMutex, INFINITE); 13 WaitForSingleObjct(hMutex, INFINITE); 14 WaitForSingleObjct(hMutex, INFINITE); 15 WaitForSingleObjct(hMutex, INFINITE); 16 WaitForSingleObjct(hMutex, INFINITE); 17 18 return 0; 19 }
1 #define UNICODE 2 #include <stdio.h> 3 #include <process.h> 4 #include <windows.h> 5 //互斥体 关键段 -> 线程同步 6 //每个互斥体保存了一个线程ID -> 7 //线程 ID -> 非0(无信号) 0(有信号) 8 HANDLE gMutex; 9 unsigned __stdcall ThreadFunc(void* lParam) 10 { 11 WaitForSingleObjct(gMutex, INFINITE); 12 return 0; 13 } 14 int main() 15 { 16 gMutex = CreateMutex( nullptr, TRUE, nullptr); 17 HANDLE hThread = (HANDLE)__beginthreadex(nullptr, 0, ThreadFunc, nullptr, 0, nullptr); 18 WaitForSingleObject(hThread, INFINITE); 19 //无论Wait都是有信号的 20 21 return 0; 22 }
1 #define UNICODE 2 #include <stdio.h> 3 #include <process.h> 4 #include <windows.h> 5 //互斥体 关键段 -> 线程同步 6 //每个互斥体保存了一个线程ID -> 7 //线程 ID -> 非0(无信号) 0(有信号) 8 HANDLE gMutex; 9 unsigned __stdcall ThreadFunc(void* lParam) 10 { 11 WaitForSingleObjct(gMutex, INFINITE); 12 return 0; 13 } 14 int main() 15 { 16 gMutex = CreateMutex( nullptr, TRUE, nullptr); 17 ReleaseMutex(gMutex); 18 HANDLE hThread = (HANDLE)__beginthreadex(nullptr, 0, ThreadFunc, nullptr, 0, nullptr); 19 //ReleaseMutex(gMutex); 20 WaitForSingleObject(hThread, INFINITE); 21 //无论Wait都是有信号的 22 23 return 0; 24 }
时间: 2024-10-05 18:06:51