016 Event互斥体 8

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

 

posted @ 2017-07-09 07:46  ☆﹎夜﹎☆  阅读(123)  评论(0编辑  收藏  举报