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

  • 相关阅读:
    定时器工厂
    无聊js画了个菱形
    盒模型之滚动条
    无聊,纯css写了个评分鼠标移入的效果
    json属性名为什么要双引号?
    原生js写的一个简单slider
    D2 前端技术论坛总结(上)
    第一天,入坑 —— 2014.10.24
    获取div相对文档的位置
    我们平时是怎么写html和css的?
  • 原文地址:https://www.cnblogs.com/csnd/p/12896994.html
Copyright © 2011-2022 走看看