zoukankan      html  css  js  c++  java
  • C++多线程同步技巧(三)--- 互斥体

    简介

    Windows互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问,在线程同步与保证程序单体运行上都有相当大的用处。

    代码样例

    ////////////////////////////////
    //
    // FileName : MutexDemo.cpp
    // Creator : PeterZheng
    // Date : 2018/10/23 21:27
    // Comment : The usage of "CreateMutex"
    //
    ////////////////////////////////
    
    #pragma once
    
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <windows.h>
    
    using namespace std;
    
    DWORD WINAPI Func1(LPVOID lpParam);
    DWORD WINAPI Func2(LPVOID lpParam);
    
    HANDLE hMutex = NULL;
    int g_num = 0;
    
    DWORD WINAPI Func1(LPVOID lpParam)
    {
    	while (g_num < 100)
    	{
    		WaitForSingleObject(hMutex, INFINITE);
    		cout << "Count: " << g_num << endl;
    		g_num++;
    		Sleep(10);
    		ReleaseMutex(hMutex); // 释放互斥体
    	}
    	return 0;
    }
    
    DWORD WINAPI Func2(LPVOID lpParam)
    {
    	while (g_num < 100)
    	{
    		WaitForSingleObject(hMutex, INFINITE);
    		cout << "Count: " << g_num << endl;
    		g_num++;
    		Sleep(10);
    		ReleaseMutex(hMutex);
    	}
    	return 0;
    }
    
    int main(void)
    {
    	hMutex = CreateMutex(NULL, FALSE, "Mutex"); // 创建互斥体
    	HANDLE hThread[2] = { 0 };
    	hThread[0] = CreateThread(NULL, 0, Func1, NULL, 0, NULL); // 创建线程1
    	hThread[1] = CreateThread(NULL, 0, Func2, NULL, 0, NULL); // 创建线程2
    	WaitForMultipleObjects(2, hThread, TRUE, INFINITE); // 等待线程执行结束
    	system("pause");
    	return 0;
    }
    

    参考文档

    【1】https://blog.csdn.net/s_lisheng/article/details/74278765

  • 相关阅读:
    java集合部分原材料
    java--Collection继承结构图
    java--类与类之间的关系
    java--BigDecimal类
    java--生成随机数
    java--枚举类型
    java--数字格式化
    Java--包装类型
    Java--StringBuffer和StringBuilder
    Java--String
  • 原文地址:https://www.cnblogs.com/csnd/p/12896994.html
Copyright © 2011-2022 走看看