基础能力-加解锁

简介: 关于加解锁的两种实现方式方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁#ifndef YAGER_MUTEX_H#define YAGER_MUTEX_H#include class CYagerMute...

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁
#ifndef YAGER_MUTEX_H
#define YAGER_MUTEX_H

#include <atomic>

class CYagerMutex
{
public:
    CYagerMutex()
        : m_atomicFlag(ATOMIC_FLAG_INIT)
    {}

    ~CYagerMutex()
    {}

    void Lock()
    {
        while (m_atomicFlag.test_and_set());
    }

    void UnLock()
    {
        m_atomicFlag.clear();
    }

private:
    std::atomic_flag  m_atomicFlag;

};
#endif //YAGER_MUTEX_H
方案二:使用libuv的mutex,实现粗粒度的加解锁
#include "libuv/include/uv.h"

class CYagerMutex
{
public:
    CYagerMutex()
    {
        uv_mutex_init(&m_mutex);
    }

    ~CYagerMutex()
    {
        uv_mutex_destroy(&m_mutex);
    }

    void Lock()
    {
        uv_mutex_lock(&m_mutex);
    }

    void UnLock()
    {
        uv_mutex_unlock(&m_mutex);
    }

private:
    uv_mutex_t	m_mutex;

};

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁
#ifndef YAGER_MUTEX_H
#define YAGER_MUTEX_H

#include <atomic>

class CYagerMutex
{
public:
    CYagerMutex()
        : m_atomicFlag(ATOMIC_FLAG_INIT)
    {}

    ~CYagerMutex()
    {}

    void Lock()
    {
        while (m_atomicFlag.test_and_set());
    }

    void UnLock()
    {
        m_atomicFlag.clear();
    }

private:
    std::atomic_flag  m_atomicFlag;

};
#endif //YAGER_MUTEX_H
方案二:使用libuv的mutex,实现粗粒度的加解锁
#include "libuv/include/uv.h"

class CYagerMutex
{
public:
    CYagerMutex()
    {
        uv_mutex_init(&m_mutex);
    }

    ~CYagerMutex()
    {
        uv_mutex_destroy(&m_mutex);
    }

    void Lock()
    {
        uv_mutex_lock(&m_mutex);
    }

    void UnLock()
    {
        uv_mutex_unlock(&m_mutex);
    }

private:
    uv_mutex_t	m_mutex;

};
目录
相关文章
|
7月前
|
存储 监控 固态存储
阿里云服务器配置选择参考:cpu与内存、带宽和云盘种类及容量选择注意事项参考
阿里云服务器配置选择参考:选择合适的阿里云服务器配置与云盘容量,用户需先明确业务需求,包括网站类型、访问量、应用类型、性能需求及数据安全性等。根据需求选CPU核心数、内存及带宽,如高并发场景需多核CPU与大内存。云盘容量上,系统盘建议20G-40G,数据盘依数据量选50G-100G或更大,并区分系统盘与数据盘用途。
|
11月前
|
机器学习/深度学习 人工智能 API
破译AI“指纹”:如何识别机器生成内容?
破译AI“指纹”:如何识别机器生成内容?
1553 117
|
7月前
|
存储 人工智能 数据可视化
大模型应用:向量与元数据联动:解锁向量数据库复合查询的核心能力.30
本文深入解析向量数据库中“向量+元数据”复合查询技术:通过融合语义相似性与结构化过滤(如时间、标签、权限等),显著提升RAG等场景的检索精度、效率与业务适配性,并结合Chroma实战演示三种查询路径及多行业应用。
547 9
|
SQL 分布式计算 数据挖掘
从Excel到高级工具:数据分析进阶指南
从Excel到高级工具:数据分析进阶指南
713 54
|
7月前
|
人工智能 自然语言处理 搜索推荐
大模型微调应用:解锁垂直场景的无限可能
大语言模型微调,是让通用AI精准适配垂直场景的关键技术:低成本、高效率、保通用、可定制。本文详解其在智能客服、内容创作、专业问答、代码生成等领域的落地实践与核心要点,助力企业将AI转化为真实生产力。(239字)
|
9月前
|
人工智能 自然语言处理 安全
2025年AI数字人公司新力量,集之互动0.8秒急速响应,构筑AI数字人核心壁垒
集之互动深耕AI数字人领域,以0.8秒极速响应、全栈私有化部署和高逼真3D技术为核心,打造安全可控、实时交互的数字员工。赋能医疗、文旅、零售等产业,助力企业降本增效,构建可持续的数字资产,推动AI商业落地。
478 4
|
安全 Java 应用服务中间件
Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?
日常开发中我们除了 web.xml 文件的配置,server.xml 文件也是 Tomcat 服务器的重要配置文件,本文内容详细介绍各个配置项的用法,结合业务场景来举例说明,让你更清楚各配置项的用法
1062 1
|
机器学习/深度学习 数据可视化 网络架构
YOLOv11改进策略【SPPF】| NeuralPS-2022 Focal Modulation : 使用焦点调制模块优化空间金字塔池化SPPF
YOLOv11改进策略【SPPF】| NeuralPS-2022 Focal Modulation : 使用焦点调制模块优化空间金字塔池化SPPF
586 14
YOLOv11改进策略【SPPF】| NeuralPS-2022 Focal Modulation : 使用焦点调制模块优化空间金字塔池化SPPF
|
数据采集 监控 数据挖掘
静态IP代理的应用场景及企业使用指南
静态IP代理提供固定IP地址,具备高稳定性和安全性,适用于跨境电商、社交媒体管理、SEO、网络数据采集、远程办公及爬虫分析等场景。企业通过选择可靠的供应商、配置网络设置并合理应用,可有效提升业务效率和安全性。例如,某电商公司利用静态住宅代理IP进行数据采集,成功分析竞争对手策略,实现销售额20%的增长。
852 1
|
算法 数据安全/隐私保护
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
本课题基于MPPT最大功率跟踪的离网光伏发电系统,使用Simulink进行建模与仿真。系统通过动态调整光伏电池的工作点,确保其始终工作在最大功率点,以实现能量的最大化利用。仿真结果完整无水印,核心程序基于MATLAB2022a。MPPT算法如扰动观察法(P&O)等能有效提高光伏发电效率。