c++利用mutex(互斥量)实现多线程「建议收藏」

c++利用mutex(互斥量)实现多线程「建议收藏」C++使用内核对象互斥体(Mutex)实现线程同步锁,当两个线程共同访问一个共享资源时,Mutex可以只向一个线程授予访问权。下面的例子模拟了售票系统,定义了两个售票线程///ConsoleApplication1.cpp:定义控制台应用程序的入口点。////mutex#include”stdafx.h”#include<stdio.h>#include<windows.h>#include<process.h>void__cdecl.

大家好,又见面了,我是你们的朋友全栈君。

C++使用内核对象互斥体(Mutex)实现线程同步锁,当两个线程共同访问一个共享资源时,Mutex可以只向一个线程授予访问权。

下面的例子模拟了售票系统,定义了两个售票线程

/// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
//mutex
#include “stdafx.h”
#include <stdio.h>
#include<windows.h>
#include<process.h>
void __cdecl  threadProc1(void* param);
void __cdecl  threadProc2(void* param);
int tickets = 100;
HANDLE hMutex = INVALID_HANDLE_VALUE;
int main()
{

    hMutex = CreateMutex(NULL, FALSE, NULL);
    HANDLE hThread1 =(HANDLE)_beginthread(threadProc1, 0, “A:”);
    HANDLE hThread2 = (HANDLE)_beginthread(threadProc2, 0, “B:”);
    HANDLE hThread[] = { hThread1 ,hThread2 };
    WaitForMultipleObjects(2, hThread, true, INFINITE);
    return 0;
}
void __cdecl  threadProc1(void* param) {

    char *p = (char *)param;
    while (tickets > 0) {

        WaitForSingleObject(hMutex, INFINITE);//等待Mutex释放
        if (tickets > 0) {

            printf(“%s sell ticket %d\n”, p, tickets–);
        }
        ReleaseMutex(hMutex);//释放mutex
    }
}
void __cdecl  threadProc2(void* param) {

    char *p = (char *)param;
    while (tickets > 0) {

        WaitForSingleObject(hMutex, INFINITE);//等待Mutex释放
        if (tickets > 0) {

            printf(“%s sell ticket %d\n”, p, tickets–);
        }
        ReleaseMutex(hMutex);//释放mutex
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153208.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月26日 下午1:16
下一篇 2022年6月26日 下午1:36


相关推荐

  • GB28181服务器_GB28181收费吗

    GB28181服务器_GB28181收费吗CarEye开发GB28181服务器有将近两年时间了,早期我们用纯C++开发了一个GB28181视频服务期,对外的接口是基于MQ协议的。这样开发出来的服务器主要有几个问题。1.SIP服务器和流媒体服务器是绑定在一个进程中的,因为没有分离,造成了视频处理和SIP服务器只能在一台服务器上运行,既不能打到GB28181协议的构架要求。也造成无法使用负载均衡的功能。2.对外接口采用了MQ通信方式。虽然MQ消息处理实时,对一些数据处理,如报警,对讲等。但MQ本身是重量级构建,不方便一些应用场景快速构建

    2022年8月31日
    4
  • JMeter基础 — JMeter聚合报告详解

    JMeter基础 — JMeter聚合报告详解提示 聚合报告组件的使用和察看结果树组件的使用方式相同 本篇文章主要是详细的介绍一下聚合报告组件内容 不做示例演示 1 聚合报告介绍在使用 JMeter 进行性能测试时 聚合报告 AggregateRep 可以说是必用的监听器 1 聚合报告的生成方式聚合报告有 2 中生成方式 在已有 jtl 文件的情况下 直接选择加载文件即可生成聚合报告 在运行 JMeter 的过程中 动态生成聚合报告 提示 我们一直使用 GUI 模式操作 JMeter 所以看到的聚合报告组件中的内容 是第二种生成方式 等

    2026年3月17日
    3
  • Java文件上传实例并解决跨域问题

    Java文件上传实例并解决跨域问题本文内容为Java文件上传实例并解决跨域问题,其中重点讲解了文件上传,MultipartFile接口的使用,配置nginx,以及解决文件上传跨域的问题

    2022年5月14日
    41
  • ZAP使用

    ZAP使用ZAP 使用 uber 开源高性能日志库一 快速开始 1 非结构化性能比结构化的要差 性能比较 https github com uber go zap 1 友好的日志打印 url https www baidu com logger zap NewDevelopme deferlogger Sync sugar logger Suga

    2026年3月20日
    2
  • 谈谈你对Spring Bean生命周期的理解【面试】

    谈谈你对Spring Bean生命周期的理解【面试】SpringBean 生命周期

    2026年3月18日
    1
  • Eclipse代码自动补全方法「建议收藏」

    Eclipse代码自动补全方法「建议收藏」MyEclipse,是在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、JavaEE以及移动应用的开发;以下小编给大家介绍在使用MyEclipse开发编写代码中代码提示的快捷方式;代码的提示大大给开发者带来高效的编程及代码书写的准确率等。详细步骤如下:1、找到Window下的Preferences里面的Java-Editor-Templates路径…

    2022年5月31日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号