码迷,mamicode.com
首页 > 编程语言 > 详细

线程同步(windows平台):互斥对象

时间:2018-10-23 21:14:28      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:数据结构   initial   mes   class   release   include   script   col   copyright   

一:介绍

互斥对象是系统内核维护的一种数据结构,保证了对象对单个线程的访问权。

二:函数说明

创建互斥对象:
    HANDLE CreateMutex(
            LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全属性结构指针,可为NULL,表示默认安全性
            BOOL bInitialOwner,     //是否占有该互斥量,TRUE:占有,FALSE:不占有
            LPCTSTR lpName         //设置互斥对象的名字
    );
获得互斥对象:
    DWORD WaitForSingleObject( 
            HANDLE hHandle,        //互斥对象的句柄 
            DWORD dwMilliseconds    //0:测试对象的状态立即返回;INFINITE:对象被触发信号后,函数才会返回
}
释放互斥对象:
    BOOL ReleaseMutex(HANDLE hHandle)

三:步骤

  1. 声明互斥对象:HANDLE hMutex
  2. 创建互斥对象:hMutex = CreateMutex(NULL, FALSE, NULL)
  3. 使用互斥对象:WaitForSingleObject(hMutex, INFINITE)
  4. 释放互斥对象:ReleaseMutex(hMutex)

四:代码实现

 1 /********************************************************
 2 Copyright (C),  2016-2018,
 3 FileName:        t13
 4 Author:            woniu201
 5 Email:             wangpengfei.201@163.com
 6 Created:           2018/10/23
 7 Description:    线程同步-互斥对象
 8 ********************************************************/
 9 #include <iostream>
10 #include <Windows.h>
11 
12 using namespace std;
13 
14 volatile int number = 1;
15 HANDLE hMutex;
16 
17 DWORD CALLBACK ThreadFun1(LPVOID pParam)
18 {
19     while (1)
20     {
21         WaitForSingleObject(hMutex, INFINITE);
22         cout << "Thread1:" << number++ << endl;
23         ReleaseMutex(hMutex);
24         if (number >= 1000)
25         {
26             break;
27         }
28         
29     }
30     return 0;
31 }
32 
33 DWORD CALLBACK ThreadFun2(LPVOID pParam)
34 {
35     while (1)
36     {
37         WaitForSingleObject(hMutex, INFINITE);
38         cout << "Thread2:" << number++ << endl;
39         ReleaseMutex(hMutex);
40         if (number >= 1000)
41         {
42             break;
43         }
44     }
45     return 0;
46 }
47 
48 
49 int main()
50 {
51     hMutex = CreateMutex(NULL, FALSE, NULL); 
52 
53     CreateThread(NULL, 0, ThreadFun1, NULL, 0, NULL);
54     CreateThread(NULL, 0, ThreadFun2, NULL, 0, NULL);
55 
56     getchar();
57     return 1;
58 }

 

线程同步(windows平台):互斥对象

标签:数据结构   initial   mes   class   release   include   script   col   copyright   

原文地址:https://www.cnblogs.com/woniu201/p/9838432.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!